{
    "settings": {
        "shell": {
            "icon": "category_shell", 
            "children": {
                "roofing_extruder_nr": {
                    "settable_per_mesh": "False", 
                    "settable_globally": "True", 
                    "description": "The extruder train used for printing the top most skin. This is used in multi-extrusion.", 
                    "type": "optional_extruder", 
                    "children": {}, 
                    "enabled": "=machine_extruder_count > 1 and max(extruderValues('roofing_layer_count')) > 0 and max(extruderValues('top_layers')) > 0", 
                    "settable_per_meshgroup": "True", 
                    "label": "Top Surface Skin Extruder", 
                    "default_value": "-1", 
                    "settable_per_extruder": "False", 
                    "value": "=top_bottom_extruder_nr"
                }, 
                "ironing_inset": {
                    "settable_per_mesh": "True", 
                    "maximum_value_warning": "=wall_line_width_0", 
                    "unit": "mm", 
                    "enabled": "=ironing_enabled", 
                    "label": "Ironing Inset", 
                    "value": "=wall_line_width_0 / 2", 
                    "limit_to_extruder": "=top_bottom_extruder_nr", 
                    "minimum_value_warning": "=0", 
                    "type": "float", 
                    "children": {}, 
                    "description": "A distance to keep from the edges of the model. Ironing all the way to the edge of the mesh may result in a jagged edge on your print.", 
                    "default_value": "0.35"
                }, 
                "alternate_extra_perimeter": {
                    "limit_to_extruder": "=infill_extruder_nr", 
                    "settable_per_mesh": "True", 
                    "type": "bool", 
                    "children": {}, 
                    "description": "Prints an extra wall at every other layer. This way infill gets caught between these extra walls, resulting in stronger prints.", 
                    "label": "Alternate Extra Wall", 
                    "default_value": "False"
                }, 
                "z_seam_x": {
                    "limit_to_extruder": "=wall_0_extruder_nr", 
                    "settable_per_mesh": "True", 
                    "type": "float", 
                    "unit": "mm", 
                    "children": {}, 
                    "description": "The X coordinate of the position near where to start printing each part in a layer.", 
                    "default_value": "100.0", 
                    "label": "Z Seam X", 
                    "enabled": "=z_seam_type == 'back'", 
                    "value": "=machine_width / 2"
                }, 
                "z_seam_relative": {
                    "limit_to_extruder": "=wall_0_extruder_nr", 
                    "settable_per_mesh": "True", 
                    "type": "bool", 
                    "unit": "mm", 
                    "children": {}, 
                    "enabled": "=z_seam_type == 'back'", 
                    "label": "Z Seam Relative", 
                    "description": "When enabled, the z seam coordinates are relative to each part's centre. When disabled, the coordinates define an absolute position on the build plate.", 
                    "default_value": "False"
                }, 
                "z_seam_type": {
                    "limit_to_extruder": "=wall_0_extruder_nr", 
                    "settable_per_mesh": "True", 
                    "type": "enum", 
                    "options": "OrderedDict([('back', 'User Specified'), ('shortest', 'Shortest'), ('random', 'Random'), ('sharpest_corner', 'Sharpest Corner')])", 
                    "children": {}, 
                    "description": "Starting point of each path in a layer. When paths in consecutive layers start at the same point a vertical seam may show on the print. When aligning these near a user specified location, the seam is easiest to remove. When placed randomly the inaccuracies at the paths' start will be less noticeable. When taking the shortest path the print will be quicker.", 
                    "label": "Z Seam Alignment", 
                    "default_value": "sharpest_corner"
                }, 
                "z_seam_y": {
                    "limit_to_extruder": "=wall_0_extruder_nr", 
                    "settable_per_mesh": "True", 
                    "type": "float", 
                    "unit": "mm", 
                    "children": {}, 
                    "description": "The Y coordinate of the position near where to start printing each part in a layer.", 
                    "default_value": "100.0", 
                    "label": "Z Seam Y", 
                    "enabled": "=z_seam_type == 'back'", 
                    "value": "=machine_depth * 3"
                }, 
                "fill_outline_gaps": {
                    "limit_to_extruder": "=wall_0_extruder_nr", 
                    "settable_per_mesh": "True", 
                    "type": "bool", 
                    "children": {}, 
                    "description": "Print pieces of the model which are horizontally thinner than the nozzle size.", 
                    "label": "Print Thin Walls", 
                    "default_value": "False"
                }, 
                "wall_thickness": {
                    "limit_to_extruder": "=wall_x_extruder_nr", 
                    "minimum_value": "=0", 
                    "settable_per_mesh": "True", 
                    "maximum_value_warning": "=10 * line_width", 
                    "type": "float", 
                    "unit": "mm", 
                    "children": {
                        "wall_line_count": {
                            "limit_to_extruder": "=wall_x_extruder_nr", 
                            "value": "=1 if magic_spiralize else max(1, round((wall_thickness - wall_line_width_0) / wall_line_width_x) + 1) if wall_thickness != 0 else 0", 
                            "minimum_value": "=0", 
                            "settable_per_mesh": "True", 
                            "maximum_value_warning": "=10", 
                            "type": "int", 
                            "children": {}, 
                            "description": "The number of walls. When calculated by the wall thickness, this value is rounded to a whole number.", 
                            "label": "Wall Line Count", 
                            "default_value": "2", 
                            "minimum_value_warning": "=1"
                        }
                    }, 
                    "description": "The thickness of the walls in the horizontal direction. This value divided by the wall line width defines the number of walls.", 
                    "label": "Wall Thickness", 
                    "minimum_value_warning": "=line_width", 
                    "default_value": "0.8"
                }, 
                "fill_perimeter_gaps": {
                    "limit_to_extruder": "=wall_0_extruder_nr", 
                    "settable_per_mesh": "True", 
                    "type": "enum", 
                    "options": "OrderedDict([('nowhere', 'Nowhere'), ('everywhere', 'Everywhere')])", 
                    "children": {}, 
                    "description": "Fills the gaps between walls where no walls fit.", 
                    "label": "Fill Gaps Between Walls", 
                    "default_value": "everywhere"
                }, 
                "ironing_pattern": {
                    "limit_to_extruder": "=top_bottom_extruder_nr", 
                    "settable_per_mesh": "True", 
                    "type": "enum", 
                    "options": "OrderedDict([('concentric', 'Concentric'), ('zigzag', 'Zig Zag')])", 
                    "children": {}, 
                    "enabled": "=ironing_enabled", 
                    "label": "Ironing Pattern", 
                    "description": "The pattern to use for ironing top surfaces.", 
                    "default_value": "zigzag"
                }, 
                "z_seam_corner": {
                    "limit_to_extruder": "=wall_0_extruder_nr", 
                    "settable_per_mesh": "True", 
                    "type": "enum", 
                    "options": "OrderedDict([('z_seam_corner_none', 'None'), ('z_seam_corner_inner', 'Hide Seam'), ('z_seam_corner_outer', 'Expose Seam'), ('z_seam_corner_any', 'Hide or Expose Seam')])", 
                    "children": {}, 
                    "enabled": "=z_seam_type != 'random'", 
                    "label": "Seam Corner Preference", 
                    "description": "Control whether corners on the model outline influence the position of the seam. None means that corners have no influence on the seam position. Hide Seam makes the seam more likely to occur on an inside corner. Expose Seam makes the seam more likely to occur on an outside corner. Hide or Expose Seam makes the seam more likely to occur at an inside or outside corner.", 
                    "default_value": "z_seam_corner_inner"
                }, 
                "roofing_layer_count": {
                    "limit_to_extruder": "=roofing_extruder_nr", 
                    "minimum_value": "=0", 
                    "settable_per_mesh": "True", 
                    "maximum_value_warning": "=top_layers - 1", 
                    "type": "int", 
                    "default_value": "0", 
                    "children": {}, 
                    "enabled": "=top_layers > 0", 
                    "label": "Top Surface Skin Layers", 
                    "description": "The number of top most skin layers. Usually only one top most layer is sufficient to generate higher quality top surfaces.", 
                    "value": "=0"
                }, 
                "travel_compensate_overlapping_walls_enabled": {
                    "limit_to_extruder": "=wall_x_extruder_nr", 
                    "settable_per_mesh": "True", 
                    "type": "bool", 
                    "children": {
                        "travel_compensate_overlapping_walls_0_enabled": {
                            "limit_to_extruder": "=wall_0_extruder_nr", 
                            "settable_per_mesh": "True", 
                            "type": "bool", 
                            "children": {}, 
                            "description": "Compensate the flow for parts of an outer wall being printed where there is already a wall in place.", 
                            "label": "Compensate Outer Wall Overlaps", 
                            "value": "=travel_compensate_overlapping_walls_enabled", 
                            "default_value": "True"
                        }, 
                        "travel_compensate_overlapping_walls_x_enabled": {
                            "limit_to_extruder": "=wall_x_extruder_nr", 
                            "settable_per_mesh": "True", 
                            "type": "bool", 
                            "children": {}, 
                            "description": "Compensate the flow for parts of an inner wall being printed where there is already a wall in place.", 
                            "label": "Compensate Inner Wall Overlaps", 
                            "value": "=travel_compensate_overlapping_walls_enabled", 
                            "default_value": "True"
                        }
                    }, 
                    "description": "Compensate the flow for parts of a wall being printed where there is already a wall in place.", 
                    "label": "Compensate Wall Overlaps", 
                    "default_value": "True"
                }, 
                "wall_0_inset": {
                    "limit_to_extruder": "=wall_0_extruder_nr", 
                    "minimum_value_warning": "=0", 
                    "settable_per_mesh": "True", 
                    "maximum_value_warning": "=machine_nozzle_size", 
                    "type": "float", 
                    "unit": "mm", 
                    "children": {}, 
                    "description": "Inset applied to the path of the outer wall. If the outer wall is smaller than the nozzle, and printed after the inner walls, use this offset to get the hole in the nozzle to overlap with the inner walls instead of the outside of the model.", 
                    "label": "Outer Wall Inset", 
                    "value": "=(machine_nozzle_size - wall_line_width_0) / 2 if (wall_line_width_0 < machine_nozzle_size and not outer_inset_first) else 0", 
                    "default_value": "0.0"
                }, 
                "jerk_ironing": {
                    "settable_per_mesh": "True", 
                    "maximum_value_warning": "=50", 
                    "unit": "mm/s", 
                    "enabled": "=resolveOrValue('jerk_enabled') and ironing_enabled", 
                    "label": "Ironing Jerk", 
                    "value": "=jerk_topbottom", 
                    "limit_to_extruder": "=top_bottom_extruder_nr", 
                    "minimum_value": "=0", 
                    "type": "float", 
                    "children": {}, 
                    "description": "The maximum instantaneous velocity change while performing ironing.", 
                    "default_value": "20"
                }, 
                "top_bottom_extruder_nr": {
                    "settable_per_mesh": "False", 
                    "settable_globally": "True", 
                    "type": "optional_extruder", 
                    "children": {}, 
                    "enabled": "=machine_extruder_count > 1", 
                    "settable_per_meshgroup": "True", 
                    "label": "Top/Bottom Extruder", 
                    "description": "The extruder train used for printing the top and bottom skin. This is used in multi-extrusion.", 
                    "settable_per_extruder": "False", 
                    "default_value": "-1"
                }, 
                "xy_offset_layer_0": {
                    "limit_to_extruder": "=wall_0_extruder_nr", 
                    "minimum_value_warning": "=-1", 
                    "settable_per_mesh": "True", 
                    "maximum_value_warning": "=1", 
                    "type": "float", 
                    "unit": "mm", 
                    "children": {}, 
                    "description": "Amount of offset applied to all polygons in the first layer. A negative value can compensate for squishing of the first layer known as \"elephant's foot\".", 
                    "label": "Initial Layer Horizontal Expansion", 
                    "value": "=xy_offset", 
                    "default_value": "0"
                }, 
                "filter_out_tiny_gaps": {
                    "limit_to_extruder": "=wall_0_extruder_nr", 
                    "settable_per_mesh": "True", 
                    "type": "bool", 
                    "children": {}, 
                    "description": "Filter out tiny gaps to reduce blobs on outside of model.", 
                    "label": "Filter Out Tiny Gaps", 
                    "default_value": "True"
                }, 
                "top_bottom_pattern_0": {
                    "limit_to_extruder": "=top_bottom_extruder_nr", 
                    "settable_per_mesh": "True", 
                    "type": "enum", 
                    "options": "OrderedDict([('lines', 'Lines'), ('concentric', 'Concentric'), ('zigzag', 'Zig Zag')])", 
                    "children": {}, 
                    "description": "The pattern on the bottom of the print on the first layer.", 
                    "label": "Bottom Pattern Initial Layer", 
                    "value": "=top_bottom_pattern", 
                    "default_value": "lines"
                }, 
                "ironing_flow": {
                    "limit_to_extruder": "=top_bottom_extruder_nr", 
                    "minimum_value": "=0", 
                    "settable_per_mesh": "True", 
                    "maximum_value_warning": "=50", 
                    "type": "float", 
                    "unit": "%", 
                    "children": {}, 
                    "enabled": "=ironing_enabled", 
                    "label": "Ironing Flow", 
                    "description": "The amount of material, relative to a normal skin line, to extrude during ironing. Keeping the nozzle filled helps filling some of the crevices of the top surface, but too much results in overextrusion and blips on the side of the surface.", 
                    "default_value": "10.0"
                }, 
                "ironing_only_highest_layer": {
                    "limit_to_extruder": "=top_bottom_extruder_nr", 
                    "settable_per_mesh": "True", 
                    "type": "bool", 
                    "children": {}, 
                    "enabled": "=ironing_enabled", 
                    "label": "Iron Only Highest Layer", 
                    "description": "Only perform ironing on the very last layer of the mesh. This saves time if the lower layers don't need a smooth surface finish.", 
                    "default_value": "False"
                }, 
                "skin_angles": {
                    "limit_to_extruder": "=top_bottom_extruder_nr", 
                    "settable_per_mesh": "True", 
                    "type": "[int]", 
                    "children": {}, 
                    "enabled": "=top_bottom_pattern != 'concentric'", 
                    "label": "Top/Bottom Line Directions", 
                    "description": "A list of integer line directions to use when the top/bottom layers use the lines or zig zag pattern. Elements from the list are used sequentially as the layers progress and when the end of the list is reached, it starts at the beginning again. The list items are separated by commas and the whole list is contained in square brackets. Default is an empty list which means use the traditional default angles (45 and 135 degrees).", 
                    "default_value": "[ ]"
                }, 
                "skin_outline_count": {
                    "limit_to_extruder": "=top_bottom_extruder_nr", 
                    "minimum_value": "=0", 
                    "settable_per_mesh": "True", 
                    "maximum_value_warning": "=10", 
                    "type": "int", 
                    "children": {}, 
                    "description": "Replaces the outermost part of the top/bottom pattern with a number of concentric lines. Using one or two lines improves roofs that start on infill material.", 
                    "label": "Extra Skin Wall Count", 
                    "default_value": "1"
                }, 
                "speed_ironing": {
                    "settable_per_mesh": "True", 
                    "maximum_value_warning": "=100", 
                    "maximum_value": "=math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)", 
                    "unit": "mm/s", 
                    "enabled": "=ironing_enabled", 
                    "label": "Ironing Speed", 
                    "value": "=speed_topbottom * 20 / 30", 
                    "limit_to_extruder": "=top_bottom_extruder_nr", 
                    "minimum_value": "=0.001", 
                    "type": "float", 
                    "children": {}, 
                    "description": "The speed at which to pass over the top surface.", 
                    "default_value": "20.0"
                }, 
                "optimize_wall_printing_order": {
                    "settable_per_mesh": "True", 
                    "type": "bool", 
                    "children": {}, 
                    "description": "Optimize the order in which walls are printed so as to reduce the number of retractions and the distance travelled. Most parts will benefit from this being enabled but some may actually take longer so please compare the print time estimates with and without optimization.", 
                    "label": "Optimize Wall Printing Order", 
                    "default_value": "False"
                }, 
                "wall_extruder_nr": {
                    "settable_per_mesh": "False", 
                    "settable_globally": "True", 
                    "type": "optional_extruder", 
                    "children": {
                        "wall_0_extruder_nr": {
                            "settable_per_mesh": "False", 
                            "settable_globally": "True", 
                            "description": "The extruder train used for printing the outer wall. This is used in multi-extrusion.", 
                            "type": "optional_extruder", 
                            "children": {}, 
                            "enabled": "=machine_extruder_count > 1", 
                            "settable_per_meshgroup": "True", 
                            "label": "Outer Wall Extruder", 
                            "default_value": "-1", 
                            "settable_per_extruder": "False", 
                            "value": "=wall_extruder_nr"
                        }, 
                        "wall_x_extruder_nr": {
                            "settable_per_mesh": "False", 
                            "settable_globally": "True", 
                            "description": "The extruder train used for printing the inner walls. This is used in multi-extrusion.", 
                            "type": "optional_extruder", 
                            "children": {}, 
                            "enabled": "=machine_extruder_count > 1", 
                            "settable_per_meshgroup": "True", 
                            "label": "Inner Wall Extruder", 
                            "default_value": "-1", 
                            "settable_per_extruder": "False", 
                            "value": "=wall_extruder_nr"
                        }
                    }, 
                    "enabled": "=machine_extruder_count > 1", 
                    "settable_per_meshgroup": "True", 
                    "label": "Wall Extruder", 
                    "description": "The extruder train used for printing the walls. This is used in multi-extrusion.", 
                    "settable_per_extruder": "False", 
                    "default_value": "-1"
                }, 
                "outer_inset_first": {
                    "settable_per_mesh": "True", 
                    "type": "bool", 
                    "children": {}, 
                    "description": "Prints walls in order of outside to inside when enabled. This can help improve dimensional accuracy in X and Y when using a high viscosity plastic like ABS; however it can decrease outer surface print quality, especially on overhangs.", 
                    "label": "Outer Before Inner Walls", 
                    "enabled": "=wall_0_extruder_nr == wall_x_extruder_nr", 
                    "default_value": "False"
                }, 
                "skin_no_small_gaps_heuristic": {
                    "limit_to_extruder": "=top_bottom_extruder_nr", 
                    "settable_per_mesh": "True", 
                    "type": "bool", 
                    "children": {}, 
                    "description": "When the model has small vertical gaps, about 5% extra computation time can be spent on generating top and bottom skin in these narrow spaces. In such case, disable the setting.", 
                    "label": "Ignore Small Z Gaps", 
                    "default_value": "True"
                }, 
                "ironing_line_spacing": {
                    "limit_to_extruder": "=top_bottom_extruder_nr", 
                    "minimum_value": "=0.001", 
                    "settable_per_mesh": "True", 
                    "maximum_value_warning": "=machine_nozzle_tip_outer_diameter", 
                    "type": "float", 
                    "unit": "mm", 
                    "children": {}, 
                    "enabled": "=ironing_enabled", 
                    "label": "Ironing Line Spacing", 
                    "description": "The distance between the lines of ironing.", 
                    "default_value": "0.1"
                }, 
                "xy_offset": {
                    "limit_to_extruder": "=wall_0_extruder_nr", 
                    "minimum_value_warning": "=-1", 
                    "settable_per_mesh": "True", 
                    "maximum_value_warning": "=1", 
                    "type": "float", 
                    "unit": "mm", 
                    "children": {}, 
                    "description": "Amount of offset applied to all polygons in each layer. Positive values can compensate for too big holes; negative values can compensate for too small holes.", 
                    "label": "Horizontal Expansion", 
                    "default_value": "0"
                }, 
                "top_bottom_thickness": {
                    "limit_to_extruder": "=top_bottom_extruder_nr", 
                    "minimum_value": "=0", 
                    "settable_per_mesh": "True", 
                    "type": "float", 
                    "unit": "mm", 
                    "children": {
                        "top_thickness": {
                            "settable_per_mesh": "True", 
                            "maximum_value": "=machine_height", 
                            "unit": "mm", 
                            "label": "Top Thickness", 
                            "minimum_value_warning": "=0.2 + resolveOrValue('layer_height')", 
                            "value": "=top_bottom_thickness", 
                            "limit_to_extruder": "=top_bottom_extruder_nr", 
                            "minimum_value": "=0", 
                            "type": "float", 
                            "children": {
                                "top_layers": {
                                    "limit_to_extruder": "=top_bottom_extruder_nr", 
                                    "value": "=0 if infill_sparse_density == 100 else math.ceil(round(top_thickness / resolveOrValue('layer_height'), 4))", 
                                    "minimum_value": "=0", 
                                    "settable_per_mesh": "True", 
                                    "maximum_value_warning": "=100", 
                                    "type": "int", 
                                    "children": {}, 
                                    "description": "The number of top layers. When calculated by the top thickness, this value is rounded to a whole number.", 
                                    "label": "Top Layers", 
                                    "default_value": "8", 
                                    "minimum_value_warning": "=2"
                                }
                            }, 
                            "description": "The thickness of the top layers in the print. This value divided by the layer height defines the number of top layers.", 
                            "default_value": "0.8"
                        }, 
                        "bottom_thickness": {
                            "settable_per_mesh": "True", 
                            "maximum_value": "=machine_height", 
                            "unit": "mm", 
                            "label": "Bottom Thickness", 
                            "minimum_value_warning": "=0.2 + resolveOrValue('layer_height')", 
                            "value": "=top_bottom_thickness", 
                            "limit_to_extruder": "=top_bottom_extruder_nr", 
                            "minimum_value": "=0", 
                            "type": "float", 
                            "children": {
                                "bottom_layers": {
                                    "limit_to_extruder": "=top_bottom_extruder_nr", 
                                    "value": "=999999 if infill_sparse_density == 100 else math.ceil(round(bottom_thickness / resolveOrValue('layer_height'), 4))", 
                                    "minimum_value": "=0", 
                                    "settable_per_mesh": "True", 
                                    "type": "int", 
                                    "children": {}, 
                                    "description": "The number of bottom layers. When calculated by the bottom thickness, this value is rounded to a whole number.", 
                                    "label": "Bottom Layers", 
                                    "default_value": "6", 
                                    "minimum_value_warning": "=2"
                                }
                            }, 
                            "description": "The thickness of the bottom layers in the print. This value divided by the layer height defines the number of bottom layers.", 
                            "default_value": "0.6"
                        }
                    }, 
                    "description": "The thickness of the top/bottom layers in the print. This value divided by the layer height defines the number of top/bottom layers.", 
                    "maximum_value": "=machine_height", 
                    "label": "Top/Bottom Thickness", 
                    "minimum_value_warning": "=0.6", 
                    "default_value": "0.8"
                }, 
                "acceleration_ironing": {
                    "settable_per_mesh": "True", 
                    "maximum_value_warning": "=10000", 
                    "unit": "mm/s\u00b2", 
                    "enabled": "=resolveOrValue('acceleration_enabled') and ironing_enabled", 
                    "label": "Ironing Acceleration", 
                    "minimum_value": "=0.1", 
                    "value": "=acceleration_topbottom", 
                    "limit_to_extruder": "=top_bottom_extruder_nr", 
                    "minimum_value_warning": "=100", 
                    "type": "float", 
                    "children": {}, 
                    "description": "The acceleration with which ironing is performed.", 
                    "default_value": "3000"
                }, 
                "top_bottom_pattern": {
                    "limit_to_extruder": "=top_bottom_extruder_nr", 
                    "settable_per_mesh": "True", 
                    "type": "enum", 
                    "options": "OrderedDict([('lines', 'Lines'), ('concentric', 'Concentric'), ('zigzag', 'Zig Zag')])", 
                    "children": {}, 
                    "description": "The pattern of the top/bottom layers.", 
                    "label": "Top/Bottom Pattern", 
                    "default_value": "lines"
                }, 
                "ironing_enabled": {
                    "limit_to_extruder": "=top_bottom_extruder_nr", 
                    "settable_per_mesh": "True", 
                    "type": "bool", 
                    "children": {}, 
                    "description": "Go over the top surface one additional time, but without extruding material. This is meant to melt the plastic on top further, creating a smoother surface.", 
                    "label": "Enable Ironing", 
                    "default_value": "False"
                }, 
                "wall_0_wipe_dist": {
                    "limit_to_extruder": "=wall_0_extruder_nr", 
                    "minimum_value": "=0", 
                    "settable_per_mesh": "True", 
                    "maximum_value_warning": "=machine_nozzle_size * 2", 
                    "type": "float", 
                    "unit": "mm", 
                    "children": {}, 
                    "description": "Distance of a travel move inserted after the outer wall, to hide the Z seam better.", 
                    "label": "Outer Wall Wipe Distance", 
                    "value": "=machine_nozzle_size / 2", 
                    "default_value": "0.2"
                }
            }, 
            "description": "Shell", 
            "label": "Shell", 
            "type": "category"
        }, 
        "cooling": {
            "icon": "category_cool", 
            "children": {
                "cool_min_layer_time": {
                    "minimum_value": "=0", 
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=600", 
                    "type": "float", 
                    "unit": "s", 
                    "children": {}, 
                    "description": "The minimum time spent in a layer. This forces the printer to slow down, to at least spend the time set here in one layer. This allows the printed material to cool down properly before printing the next layer. Layers may still take shorter than the minimal layer time if Lift Head is disabled and if the Minimum Speed would otherwise be violated.", 
                    "label": "Minimum Layer Time", 
                    "default_value": "5", 
                    "settable_per_extruder": "True"
                }, 
                "cool_lift_head": {
                    "settable_per_mesh": "False", 
                    "type": "bool", 
                    "children": {}, 
                    "description": "When the minimum speed is hit because of minimum layer time, lift the head away from the print and wait the extra time until the minimum layer time is reached.", 
                    "label": "Lift Head", 
                    "default_value": "False", 
                    "settable_per_extruder": "True"
                }, 
                "cool_fan_enabled": {
                    "settable_per_mesh": "False", 
                    "type": "bool", 
                    "children": {}, 
                    "description": "Enables the print cooling fans while printing. The fans improve print quality on layers with short layer times and bridging / overhangs.", 
                    "label": "Enable Print Cooling", 
                    "default_value": "True", 
                    "settable_per_extruder": "True"
                }, 
                "cool_fan_speed": {
                    "settable_per_mesh": "False", 
                    "maximum_value": "=100", 
                    "unit": "%", 
                    "settable_per_extruder": "True", 
                    "enabled": "=cool_fan_enabled", 
                    "label": "Fan Speed", 
                    "value": "=100.0 if cool_fan_enabled else 0.0", 
                    "minimum_value": "=0", 
                    "type": "float", 
                    "children": {
                        "cool_fan_speed_max": {
                            "settable_per_mesh": "False", 
                            "maximum_value": "=100", 
                            "unit": "%", 
                            "settable_per_extruder": "True", 
                            "enabled": "=cool_fan_enabled", 
                            "label": "Maximum Fan Speed", 
                            "value": "=cool_fan_speed", 
                            "minimum_value": "=max(0, cool_fan_speed_min)", 
                            "type": "float", 
                            "children": {}, 
                            "description": "The speed at which the fans spin on the minimum layer time. The fan speed gradually increases between the regular fan speed and maximum fan speed when the threshold is hit.", 
                            "default_value": "100"
                        }, 
                        "cool_fan_speed_min": {
                            "settable_per_mesh": "False", 
                            "maximum_value": "=100", 
                            "unit": "%", 
                            "settable_per_extruder": "True", 
                            "enabled": "=cool_fan_enabled", 
                            "label": "Regular Fan Speed", 
                            "value": "=cool_fan_speed", 
                            "minimum_value": "=0", 
                            "type": "float", 
                            "children": {}, 
                            "description": "The speed at which the fans spin before hitting the threshold. When a layer prints faster than the threshold, the fan speed gradually inclines towards the maximum fan speed.", 
                            "default_value": "100"
                        }
                    }, 
                    "description": "The speed at which the print cooling fans spin.", 
                    "default_value": "100"
                }, 
                "cool_fan_full_at_height": {
                    "minimum_value": "=0", 
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=10.0", 
                    "type": "float", 
                    "unit": "mm", 
                    "children": {
                        "cool_fan_full_layer": {
                            "minimum_value": "=1", 
                            "settable_per_mesh": "False", 
                            "maximum_value_warning": "=10 / resolveOrValue('layer_height')", 
                            "type": "int", 
                            "children": {}, 
                            "description": "The layer at which the fans spin on regular fan speed. If regular fan speed at height is set, this value is calculated and rounded to a whole number.", 
                            "label": "Regular Fan Speed at Layer", 
                            "value": "=max(1, int(math.floor((cool_fan_full_at_height - resolveOrValue('layer_height_0')) / resolveOrValue('layer_height')) + 2))", 
                            "settable_per_extruder": "True", 
                            "default_value": "2"
                        }
                    }, 
                    "description": "The height at which the fans spin on regular fan speed. At the layers below the fan speed gradually increases from Initial Fan Speed to Regular Fan Speed.", 
                    "label": "Regular Fan Speed at Height", 
                    "value": "=0 if resolveOrValue('adhesion_type') == 'raft' else resolveOrValue('layer_height_0')", 
                    "settable_per_extruder": "True", 
                    "default_value": "0.5"
                }, 
                "cool_fan_speed_0": {
                    "minimum_value": "=0", 
                    "settable_per_mesh": "False", 
                    "type": "float", 
                    "unit": "%", 
                    "children": {}, 
                    "enabled": "=cool_fan_enabled", 
                    "maximum_value": "=100", 
                    "label": "Initial Fan Speed", 
                    "description": "The speed at which the fans spin at the start of the print. In subsequent layers the fan speed is gradually increased up to the layer corresponding to Regular Fan Speed at Height.", 
                    "settable_per_extruder": "True", 
                    "default_value": "0"
                }, 
                "cool_min_layer_time_fan_speed_max": {
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=600", 
                    "type": "float", 
                    "unit": "s", 
                    "children": {}, 
                    "description": "The layer time which sets the threshold between regular fan speed and maximum fan speed. Layers that print slower than this time use regular fan speed. For faster layers the fan speed gradually increases towards the maximum fan speed.", 
                    "label": "Regular/Maximum Fan Speed Threshold", 
                    "default_value": "10", 
                    "settable_per_extruder": "True"
                }, 
                "cool_min_speed": {
                    "minimum_value": "=0", 
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=100", 
                    "type": "float", 
                    "unit": "mm/s", 
                    "children": {}, 
                    "description": "The minimum print speed, despite slowing down due to the minimum layer time. When the printer would slow down too much, the pressure in the nozzle would be too low and result in bad print quality.", 
                    "label": "Minimum Speed", 
                    "default_value": "10", 
                    "settable_per_extruder": "True"
                }
            }, 
            "description": "Cooling", 
            "label": "Cooling", 
            "type": "category"
        }, 
        "travel": {
            "icon": "category_travel", 
            "children": {
                "retraction_combing": {
                    "resolve": "='noskin' if 'noskin' in extruderValues('retraction_combing') else ('all' if 'all' in extruderValues('retraction_combing') else 'off')", 
                    "settable_per_mesh": "False", 
                    "type": "enum", 
                    "options": "OrderedDict([('off', 'Off'), ('all', 'All'), ('noskin', 'No Skin')])", 
                    "children": {}, 
                    "description": "Combing keeps the nozzle within already printed areas when traveling. This results in slightly longer travel moves but reduces the need for retractions. If combing is off, the material will retract and the nozzle moves in a straight line to the next point. It is also possible to avoid combing over top/bottom skin areas by combing within the infill only.", 
                    "label": "Combing Mode", 
                    "default_value": "all", 
                    "settable_per_extruder": "False"
                }, 
                "layer_start_y": {
                    "minimum_value": "=machine_depth / -2 if machine_center_is_zero else 0", 
                    "settable_per_mesh": "False", 
                    "type": "float", 
                    "unit": "mm", 
                    "children": {}, 
                    "description": "The Y coordinate of the position near where to find the part to start printing each layer.", 
                    "settable_per_meshgroup": "True", 
                    "label": "Layer Start Y", 
                    "default_value": "0.0", 
                    "settable_per_extruder": "True"
                }, 
                "retraction_hop_only_when_collides": {
                    "settable_per_mesh": "False", 
                    "type": "bool", 
                    "children": {}, 
                    "enabled": "=retraction_enable and retraction_hop_enabled and travel_avoid_other_parts", 
                    "label": "Z Hop Only Over Printed Parts", 
                    "description": "Only perform a Z Hop when moving over printed parts which cannot be avoided by horizontal motion by Avoid Printed Parts when Traveling.", 
                    "settable_per_extruder": "True", 
                    "default_value": "False"
                }, 
                "retraction_hop": {
                    "minimum_value_warning": "=0", 
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=10", 
                    "type": "float", 
                    "unit": "mm", 
                    "children": {}, 
                    "enabled": "=retraction_enable and retraction_hop_enabled", 
                    "label": "Z Hop Height", 
                    "description": "The height difference when performing a Z Hop.", 
                    "settable_per_extruder": "True", 
                    "default_value": "1"
                }, 
                "layer_start_x": {
                    "minimum_value": "=machine_width / -2 if machine_center_is_zero else 0", 
                    "settable_per_mesh": "False", 
                    "type": "float", 
                    "unit": "mm", 
                    "children": {}, 
                    "description": "The X coordinate of the position near where to find the part to start printing each layer.", 
                    "settable_per_meshgroup": "True", 
                    "label": "Layer Start X", 
                    "default_value": "0.0", 
                    "settable_per_extruder": "True"
                }, 
                "travel_avoid_other_parts": {
                    "settable_per_mesh": "False", 
                    "type": "bool", 
                    "children": {}, 
                    "enabled": "=resolveOrValue('retraction_combing') != 'off'", 
                    "label": "Avoid Printed Parts When Traveling", 
                    "description": "The nozzle avoids already printed parts when traveling. This option is only available when combing is enabled.", 
                    "settable_per_extruder": "True", 
                    "default_value": "True"
                }, 
                "travel_avoid_distance": {
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=machine_nozzle_tip_outer_diameter * 5", 
                    "unit": "mm", 
                    "settable_per_extruder": "True", 
                    "enabled": "=resolveOrValue('retraction_combing') != 'off' and travel_avoid_other_parts", 
                    "label": "Travel Avoid Distance", 
                    "minimum_value": "=0", 
                    "value": "=machine_nozzle_tip_outer_diameter / 2 * 1.25", 
                    "minimum_value_warning": "=machine_nozzle_tip_outer_diameter * 0.5", 
                    "type": "float", 
                    "children": {}, 
                    "description": "The distance between the nozzle and already printed parts when avoiding during travel moves.", 
                    "default_value": "0.625"
                }, 
                "travel_retract_before_outer_wall": {
                    "settable_per_mesh": "False", 
                    "type": "bool", 
                    "children": {}, 
                    "enabled": "=retraction_enable", 
                    "label": "Retract Before Outer Wall", 
                    "description": "Always retract when moving to start an outer wall.", 
                    "settable_per_extruder": "False", 
                    "default_value": "False"
                }, 
                "retraction_hop_after_extruder_switch": {
                    "settable_per_mesh": "False", 
                    "type": "bool", 
                    "children": {}, 
                    "enabled": "=retraction_hop_enabled and machine_extruder_count > 1", 
                    "label": "Z Hop After Extruder Switch", 
                    "description": "After the machine switched from one extruder to the other, the build plate is lowered to create clearance between the nozzle and the print. This prevents the nozzle from leaving oozed material on the outside of a print.", 
                    "settable_per_extruder": "True", 
                    "default_value": "True"
                }, 
                "start_layers_at_same_position": {
                    "settable_per_mesh": "False", 
                    "type": "bool", 
                    "children": {}, 
                    "enabled": "=False", 
                    "settable_per_meshgroup": "True", 
                    "label": "Start Layers with the Same Part", 
                    "description": "In each layer start with printing the object near the same point, so that we don't start a new layer with printing the piece which the previous layer ended with. This makes for better overhangs and small parts, but increases printing time.", 
                    "settable_per_extruder": "False", 
                    "default_value": "False"
                }, 
                "retraction_hop_enabled": {
                    "settable_per_mesh": "False", 
                    "type": "bool", 
                    "children": {}, 
                    "enabled": "=retraction_enable", 
                    "label": "Z Hop When Retracted", 
                    "description": "Whenever a retraction is done, the tool head is raised to create a clearance between the nozzle and the print. It prevents the nozzle from hitting the print during travel moves, reducing the chance to knock the print from the build plate.", 
                    "settable_per_extruder": "True", 
                    "default_value": "False"
                }
            }, 
            "description": "travel", 
            "label": "Travel", 
            "type": "category"
        }, 
        "resolution": {
            "icon": "category_layer_height", 
            "children": {
                "layer_height": {
                    "resolve": "=sum(extruderValues('layer_height')) / len(extruderValues('layer_height'))", 
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=0.8 * min(extruderValues('machine_nozzle_size'))", 
                    "unit": "mm", 
                    "settable_per_extruder": "False", 
                    "label": "Layer Height", 
                    "minimum_value": "=0.001", 
                    "minimum_value_warning": "=0.04", 
                    "type": "float", 
                    "children": {}, 
                    "description": "The height of each layer in mm. Higher values produce faster prints in lower resolution, lower values produce slower prints in higher resolution.", 
                    "default_value": "0.1"
                }, 
                "layer_height_0": {
                    "resolve": "=min(extruderValues('layer_height_0'))", 
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=0.5", 
                    "unit": "mm", 
                    "settable_per_extruder": "False", 
                    "label": "Initial Layer Height", 
                    "minimum_value": "=0.001", 
                    "minimum_value_warning": "=0.1", 
                    "type": "float", 
                    "children": {}, 
                    "description": "The height of the initial layer in mm. A thicker initial layer makes adhesion to the build plate easier.", 
                    "default_value": "0.3"
                }, 
                "line_width": {
                    "minimum_value_warning": "=0.1 + 0.4 * machine_nozzle_size", 
                    "minimum_value": "=0.001", 
                    "settable_per_mesh": "True", 
                    "maximum_value_warning": "=2 * machine_nozzle_size", 
                    "type": "float", 
                    "unit": "mm", 
                    "children": {
                        "infill_line_width": {
                            "settable_per_mesh": "True", 
                            "maximum_value_warning": "=3 * machine_nozzle_size", 
                            "unit": "mm", 
                            "enabled": "=infill_sparse_density > 0", 
                            "label": "Infill Line Width", 
                            "minimum_value": "=0.001", 
                            "value": "=line_width", 
                            "limit_to_extruder": "=infill_extruder_nr", 
                            "minimum_value_warning": "=0.1 + 0.4 * machine_nozzle_size", 
                            "type": "float", 
                            "children": {}, 
                            "description": "Width of a single infill line.", 
                            "default_value": "0.4"
                        }, 
                        "wall_line_width": {
                            "settable_per_mesh": "True", 
                            "maximum_value_warning": "=2 * machine_nozzle_size", 
                            "unit": "mm", 
                            "label": "Wall Line Width", 
                            "minimum_value_warning": "=0.1 + 0.4 * machine_nozzle_size", 
                            "value": "=line_width", 
                            "limit_to_extruder": "=wall_0_extruder_nr if wall_x_extruder_nr == wall_0_extruder_nr else -1", 
                            "minimum_value": "=0.001", 
                            "type": "float", 
                            "children": {
                                "wall_line_width_0": {
                                    "settable_per_mesh": "True", 
                                    "maximum_value_warning": "=2 * machine_nozzle_size", 
                                    "unit": "mm", 
                                    "label": "Outer Wall Line Width", 
                                    "minimum_value_warning": "=(0.1 + 0.4 * machine_nozzle_size) if outer_inset_first else 0.1 * machine_nozzle_size", 
                                    "value": "=wall_line_width", 
                                    "limit_to_extruder": "=wall_0_extruder_nr", 
                                    "minimum_value": "=0.001", 
                                    "type": "float", 
                                    "children": {}, 
                                    "description": "Width of the outermost wall line. By lowering this value, higher levels of detail can be printed.", 
                                    "default_value": "0.4"
                                }, 
                                "wall_line_width_x": {
                                    "settable_per_mesh": "True", 
                                    "maximum_value_warning": "=2 * machine_nozzle_size", 
                                    "unit": "mm", 
                                    "label": "Inner Wall(s) Line Width", 
                                    "minimum_value_warning": "=0.1 + 0.4 * machine_nozzle_size", 
                                    "value": "=wall_line_width", 
                                    "limit_to_extruder": "=wall_x_extruder_nr", 
                                    "minimum_value": "=0.001", 
                                    "type": "float", 
                                    "children": {}, 
                                    "description": "Width of a single wall line for all wall lines except the outermost one.", 
                                    "default_value": "0.4"
                                }
                            }, 
                            "description": "Width of a single wall line.", 
                            "default_value": "0.4"
                        }, 
                        "prime_tower_line_width": {
                            "settable_per_mesh": "False", 
                            "maximum_value_warning": "=2 * machine_nozzle_size", 
                            "unit": "mm", 
                            "settable_per_extruder": "True", 
                            "enabled": "=resolveOrValue('prime_tower_enable')", 
                            "label": "Prime Tower Line Width", 
                            "minimum_value": "=0.001", 
                            "value": "=line_width", 
                            "minimum_value_warning": "=0.1 + 0.4 * machine_nozzle_size", 
                            "type": "float", 
                            "children": {}, 
                            "description": "Width of a single prime tower line.", 
                            "default_value": "0.4"
                        }, 
                        "support_interface_line_width": {
                            "settable_per_mesh": "False", 
                            "maximum_value_warning": "=2 * machine_nozzle_size", 
                            "unit": "mm", 
                            "settable_per_extruder": "True", 
                            "enabled": "=support_enable and support_interface_enable", 
                            "label": "Support Interface Line Width", 
                            "minimum_value": "=0.001", 
                            "value": "=line_width", 
                            "limit_to_extruder": "=support_interface_extruder_nr", 
                            "minimum_value_warning": "=0.1 + 0.4 * machine_nozzle_size", 
                            "type": "float", 
                            "children": {
                                "support_bottom_line_width": {
                                    "settable_per_mesh": "False", 
                                    "maximum_value_warning": "=2 * machine_nozzle_size", 
                                    "unit": "mm", 
                                    "settable_per_extruder": "True", 
                                    "enabled": "=support_enable and support_bottom_enable", 
                                    "label": "Support Floor Line Width", 
                                    "minimum_value": "=0.001", 
                                    "value": "=extruderValue(support_bottom_extruder_nr, 'support_interface_line_width')", 
                                    "limit_to_extruder": "=support_bottom_extruder_nr", 
                                    "minimum_value_warning": "=0.4 * machine_nozzle_size", 
                                    "type": "float", 
                                    "children": {}, 
                                    "description": "Width of a single support floor line.", 
                                    "default_value": "0.4"
                                }, 
                                "support_roof_line_width": {
                                    "settable_per_mesh": "False", 
                                    "maximum_value_warning": "=2 * machine_nozzle_size", 
                                    "unit": "mm", 
                                    "settable_per_extruder": "True", 
                                    "enabled": "=support_enable and support_roof_enable", 
                                    "label": "Support Roof Line Width", 
                                    "minimum_value": "=0.001", 
                                    "value": "=extruderValue(support_roof_extruder_nr, 'support_interface_line_width')", 
                                    "limit_to_extruder": "=support_roof_extruder_nr", 
                                    "minimum_value_warning": "=0.4 * machine_nozzle_size", 
                                    "type": "float", 
                                    "children": {}, 
                                    "description": "Width of a single support roof line.", 
                                    "default_value": "0.4"
                                }
                            }, 
                            "description": "Width of a single line of support roof or floor.", 
                            "default_value": "0.4"
                        }, 
                        "initial_layer_line_width_factor": {
                            "minimum_value": "=0.001", 
                            "settable_per_mesh": "False", 
                            "maximum_value_warning": "=150", 
                            "type": "float", 
                            "unit": "%", 
                            "children": {}, 
                            "description": "Multiplier of the line width on the first layer. Increasing this could improve bed adhesion.", 
                            "label": "Initial Layer Line Width", 
                            "default_value": "100.0", 
                            "settable_per_extruder": "True"
                        }, 
                        "support_line_width": {
                            "settable_per_mesh": "False", 
                            "maximum_value_warning": "=3 * machine_nozzle_size", 
                            "unit": "mm", 
                            "settable_per_extruder": "True", 
                            "enabled": "=support_enable", 
                            "label": "Support Line Width", 
                            "minimum_value": "=0.001", 
                            "value": "=line_width", 
                            "limit_to_extruder": "=support_infill_extruder_nr", 
                            "minimum_value_warning": "=0.1 + 0.4 * machine_nozzle_size", 
                            "type": "float", 
                            "children": {}, 
                            "description": "Width of a single support structure line.", 
                            "default_value": "0.4"
                        }, 
                        "skirt_brim_line_width": {
                            "settable_per_mesh": "False", 
                            "maximum_value_warning": "=3 * machine_nozzle_size", 
                            "unit": "mm", 
                            "settable_per_extruder": "True", 
                            "enabled": "=resolveOrValue('adhesion_type') == 'skirt' or resolveOrValue('adhesion_type') == 'brim'", 
                            "label": "Skirt/Brim Line Width", 
                            "minimum_value": "=0.001", 
                            "value": "=line_width", 
                            "minimum_value_warning": "=0.1 + 0.4 * machine_nozzle_size", 
                            "type": "float", 
                            "children": {}, 
                            "description": "Width of a single skirt or brim line.", 
                            "default_value": "0.4"
                        }, 
                        "skin_line_width": {
                            "settable_per_mesh": "True", 
                            "maximum_value_warning": "=2 * machine_nozzle_size", 
                            "unit": "mm", 
                            "label": "Top/Bottom Line Width", 
                            "minimum_value_warning": "=0.1 + 0.4 * machine_nozzle_size", 
                            "value": "=line_width", 
                            "limit_to_extruder": "=top_bottom_extruder_nr", 
                            "minimum_value": "=0.001", 
                            "type": "float", 
                            "children": {}, 
                            "description": "Width of a single top/bottom line.", 
                            "default_value": "0.4"
                        }
                    }, 
                    "description": "Width of a single line. Generally, the width of each line should correspond to the width of the nozzle. However, slightly reducing this value could produce better prints.", 
                    "label": "Line Width", 
                    "default_value": "0.4", 
                    "value": "=machine_nozzle_size"
                }
            }, 
            "description": "All settings that influence the resolution of the print. These settings have a large impact on the quality (and print time)", 
            "label": "Quality", 
            "type": "category"
        }, 
        "command_line_settings": {
            "children": {
                "center_object": {
                    "type": "bool", 
                    "children": {}, 
                    "description": "Whether to center the object on the middle of the build platform (0,0), instead of using the coordinate system in which the object was saved.", 
                    "label": "Center object", 
                    "enabled": "=False", 
                    "default_value": "False"
                }, 
                "mesh_position_x": {
                    "type": "float", 
                    "children": {}, 
                    "description": "Offset applied to the object in the x direction.", 
                    "label": "Mesh position x", 
                    "enabled": "=False", 
                    "default_value": "0"
                }, 
                "mesh_position_y": {
                    "type": "float", 
                    "children": {}, 
                    "description": "Offset applied to the object in the y direction.", 
                    "label": "Mesh position y", 
                    "enabled": "=False", 
                    "default_value": "0"
                }, 
                "mesh_position_z": {
                    "type": "float", 
                    "children": {}, 
                    "description": "Offset applied to the object in the z direction. With this you can perform what was used to be called 'Object Sink'.", 
                    "label": "Mesh position z", 
                    "enabled": "=False", 
                    "default_value": "0"
                }, 
                "mesh_rotation_matrix": {
                    "enabled": "=False", 
                    "children": {}, 
                    "description": "Transformation matrix to be applied to the model when loading it from file.", 
                    "type": "str", 
                    "label": "Mesh Rotation Matrix", 
                    "default_value": "[[1,0,0], [0,1,0], [0,0,1]]"
                }
            }, 
            "description": "Settings which are only used if CuraEngine isn't called from the Cura frontend.", 
            "label": "Command Line Settings", 
            "enabled": "=False", 
            "type": "category"
        }, 
        "speed": {
            "icon": "category_speed", 
            "children": {
                "speed_equalize_flow_enabled": {
                    "settable_per_mesh": "False", 
                    "type": "bool", 
                    "children": {}, 
                    "description": "Print thinner than normal lines faster so that the amount of material extruded per second remains the same. Thin pieces in your model might require lines printed with smaller line width than provided in the settings. This setting controls the speed changes for such lines.", 
                    "label": "Equalize Filament Flow", 
                    "default_value": "False", 
                    "settable_per_extruder": "True"
                }, 
                "jerk_print": {
                    "minimum_value": "=0", 
                    "settable_per_mesh": "True", 
                    "maximum_value_warning": "=50", 
                    "type": "float", 
                    "unit": "mm/s", 
                    "children": {
                        "jerk_roofing": {
                            "settable_per_mesh": "True", 
                            "maximum_value_warning": "=50", 
                            "unit": "mm/s", 
                            "enabled": "=resolveOrValue('jerk_enabled') and roofing_layer_count > 0 and top_layers > 0", 
                            "label": "Top Surface Skin Jerk", 
                            "value": "=jerk_topbottom", 
                            "limit_to_extruder": "=roofing_extruder_nr", 
                            "minimum_value": "=0", 
                            "type": "float", 
                            "children": {}, 
                            "description": "The maximum instantaneous velocity change with which top surface skin layers are printed.", 
                            "default_value": "20"
                        }, 
                        "jerk_infill": {
                            "settable_per_mesh": "True", 
                            "maximum_value_warning": "=50", 
                            "unit": "mm/s", 
                            "enabled": "=resolveOrValue('jerk_enabled') and infill_sparse_density > 0", 
                            "label": "Infill Jerk", 
                            "value": "=jerk_print", 
                            "limit_to_extruder": "=infill_extruder_nr", 
                            "minimum_value": "=0", 
                            "type": "float", 
                            "children": {}, 
                            "description": "The maximum instantaneous velocity with which infill is printed.", 
                            "default_value": "12"
                        }, 
                        "jerk_topbottom": {
                            "settable_per_mesh": "True", 
                            "maximum_value_warning": "=50", 
                            "unit": "mm/s", 
                            "enabled": "=resolveOrValue('jerk_enabled')", 
                            "label": "Top/Bottom Jerk", 
                            "value": "=jerk_print", 
                            "limit_to_extruder": "=top_bottom_extruder_nr", 
                            "minimum_value": "=0", 
                            "type": "float", 
                            "children": {}, 
                            "description": "The maximum instantaneous velocity with which top/bottom layers are printed.", 
                            "default_value": "12"
                        }, 
                        "jerk_support": {
                            "settable_per_mesh": "False", 
                            "maximum_value_warning": "=50", 
                            "unit": "mm/s", 
                            "settable_per_extruder": "True", 
                            "enabled": "=resolveOrValue('jerk_enabled') and support_enable", 
                            "label": "Support Jerk", 
                            "value": "=jerk_print", 
                            "limit_to_extruder": "=support_extruder_nr", 
                            "minimum_value": "=0", 
                            "type": "float", 
                            "children": {
                                "jerk_support_infill": {
                                    "settable_per_mesh": "False", 
                                    "maximum_value_warning": "=50", 
                                    "unit": "mm/s", 
                                    "settable_per_extruder": "True", 
                                    "enabled": "=resolveOrValue('jerk_enabled') and support_enable", 
                                    "label": "Support Infill Jerk", 
                                    "value": "=jerk_support", 
                                    "limit_to_extruder": "=support_infill_extruder_nr", 
                                    "minimum_value": "=0", 
                                    "type": "float", 
                                    "children": {}, 
                                    "description": "The maximum instantaneous velocity with which the infill of support is printed.", 
                                    "default_value": "12"
                                }, 
                                "jerk_support_interface": {
                                    "settable_per_mesh": "False", 
                                    "maximum_value_warning": "=50", 
                                    "unit": "mm/s", 
                                    "settable_per_extruder": "True", 
                                    "enabled": "=resolveOrValue('jerk_enabled') and support_interface_enable and support_enable", 
                                    "label": "Support Interface Jerk", 
                                    "value": "=jerk_support", 
                                    "limit_to_extruder": "=support_interface_extruder_nr", 
                                    "minimum_value": "=0", 
                                    "type": "float", 
                                    "children": {
                                        "jerk_support_roof": {
                                            "settable_per_mesh": "False", 
                                            "maximum_value_warning": "=50", 
                                            "unit": "mm/s", 
                                            "settable_per_extruder": "True", 
                                            "enabled": "=resolveOrValue('jerk_enabled') and support_roof_enable and support_enable", 
                                            "label": "Support Roof Jerk", 
                                            "value": "=extruderValue(support_roof_extruder_nr, 'jerk_support_interface')", 
                                            "limit_to_extruder": "=support_roof_extruder_nr", 
                                            "minimum_value": "=0", 
                                            "type": "float", 
                                            "children": {}, 
                                            "description": "The maximum instantaneous velocity with which the roofs of support are printed.", 
                                            "default_value": "20"
                                        }, 
                                        "jerk_support_bottom": {
                                            "settable_per_mesh": "False", 
                                            "maximum_value_warning": "=50", 
                                            "unit": "mm/s", 
                                            "settable_per_extruder": "True", 
                                            "enabled": "=resolveOrValue('jerk_enabled') and support_bottom_enable and support_enable", 
                                            "label": "Support Floor Jerk", 
                                            "value": "=extruderValue(support_roof_extruder_nr, 'jerk_support_interface')", 
                                            "limit_to_extruder": "=support_bottom_extruder_nr", 
                                            "minimum_value": "=0", 
                                            "type": "float", 
                                            "children": {}, 
                                            "description": "The maximum instantaneous velocity with which the floors of support are printed.", 
                                            "default_value": "20"
                                        }
                                    }, 
                                    "description": "The maximum instantaneous velocity with which the roofs and floors of support are printed.", 
                                    "default_value": "12"
                                }
                            }, 
                            "description": "The maximum instantaneous velocity with which the support structure is printed.", 
                            "default_value": "12"
                        }, 
                        "jerk_prime_tower": {
                            "default_value": "12", 
                            "minimum_value": "=0", 
                            "settable_per_mesh": "False", 
                            "maximum_value_warning": "=50", 
                            "type": "float", 
                            "unit": "mm/s", 
                            "children": {}, 
                            "description": "The maximum instantaneous velocity with which the prime tower is printed.", 
                            "label": "Prime Tower Jerk", 
                            "enabled": "=resolveOrValue('prime_tower_enable') and resolveOrValue('jerk_enabled')", 
                            "value": "=jerk_print"
                        }, 
                        "jerk_wall": {
                            "default_value": "12", 
                            "minimum_value": "=0", 
                            "settable_per_mesh": "True", 
                            "maximum_value_warning": "=50", 
                            "type": "float", 
                            "unit": "mm/s", 
                            "children": {
                                "jerk_wall_x": {
                                    "settable_per_mesh": "True", 
                                    "maximum_value_warning": "=50", 
                                    "unit": "mm/s", 
                                    "enabled": "=resolveOrValue('jerk_enabled')", 
                                    "label": "Inner Wall Jerk", 
                                    "value": "=jerk_wall", 
                                    "limit_to_extruder": "=wall_x_extruder_nr", 
                                    "minimum_value": "=0", 
                                    "type": "float", 
                                    "children": {}, 
                                    "description": "The maximum instantaneous velocity with which all inner walls are printed.", 
                                    "default_value": "12"
                                }, 
                                "jerk_wall_0": {
                                    "settable_per_mesh": "True", 
                                    "maximum_value_warning": "=50", 
                                    "unit": "mm/s", 
                                    "enabled": "=resolveOrValue('jerk_enabled')", 
                                    "label": "Outer Wall Jerk", 
                                    "value": "=jerk_wall", 
                                    "limit_to_extruder": "=wall_0_extruder_nr", 
                                    "minimum_value": "=0", 
                                    "type": "float", 
                                    "children": {}, 
                                    "description": "The maximum instantaneous velocity with which the outermost walls are printed.", 
                                    "default_value": "12"
                                }
                            }, 
                            "description": "The maximum instantaneous velocity with which the walls are printed.", 
                            "label": "Wall Jerk", 
                            "enabled": "=resolveOrValue('jerk_enabled')", 
                            "value": "=jerk_print"
                        }
                    }, 
                    "enabled": "=resolveOrValue('jerk_enabled')", 
                    "label": "Print Jerk", 
                    "description": "The maximum instantaneous velocity of the print head.", 
                    "default_value": "12"
                }, 
                "jerk_travel": {
                    "default_value": "12", 
                    "minimum_value": "=0", 
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=50", 
                    "type": "float", 
                    "unit": "mm/s", 
                    "children": {}, 
                    "description": "The maximum instantaneous velocity with which travel moves are made.", 
                    "label": "Travel Jerk", 
                    "enabled": "=resolveOrValue('jerk_enabled')", 
                    "value": "=jerk_print if magic_spiralize else 12"
                }, 
                "max_feedrate_z_override": {
                    "minimum_value": "=0", 
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=machine_max_feedrate_z", 
                    "type": "float", 
                    "unit": "mm/s", 
                    "children": {}, 
                    "description": "The maximum speed with which the build plate is moved. Setting this to zero causes the print to use the firmware defaults for the maximum z speed.", 
                    "maximum_value": "=299792458000", 
                    "label": "Maximum Z Speed", 
                    "default_value": "0", 
                    "settable_per_extruder": "True"
                }, 
                "acceleration_travel": {
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=10000", 
                    "unit": "mm/s\u00b2", 
                    "enabled": "=resolveOrValue('acceleration_enabled')", 
                    "label": "Travel Acceleration", 
                    "value": "=acceleration_print if magic_spiralize else 500", 
                    "minimum_value": "=0.1", 
                    "minimum_value_warning": "=100", 
                    "type": "float", 
                    "children": {}, 
                    "description": "The acceleration with which travel moves are made.", 
                    "default_value": "500"
                }, 
                "acceleration_print": {
                    "minimum_value_warning": "=100", 
                    "minimum_value": "=0.1", 
                    "settable_per_mesh": "True", 
                    "maximum_value_warning": "=10000", 
                    "type": "float", 
                    "unit": "mm/s\u00b2", 
                    "children": {
                        "acceleration_infill": {
                            "settable_per_mesh": "True", 
                            "maximum_value_warning": "=10000", 
                            "unit": "mm/s\u00b2", 
                            "enabled": "=resolveOrValue('acceleration_enabled') and infill_sparse_density > 0", 
                            "label": "Infill Acceleration", 
                            "minimum_value": "=0.1", 
                            "value": "=acceleration_print", 
                            "limit_to_extruder": "=infill_extruder_nr", 
                            "minimum_value_warning": "=100", 
                            "type": "float", 
                            "children": {}, 
                            "description": "The acceleration with which infill is printed.", 
                            "default_value": "500"
                        }, 
                        "acceleration_topbottom": {
                            "settable_per_mesh": "True", 
                            "maximum_value_warning": "=10000", 
                            "unit": "mm/s\u00b2", 
                            "enabled": "=resolveOrValue('acceleration_enabled')", 
                            "label": "Top/Bottom Acceleration", 
                            "minimum_value": "=0.1", 
                            "value": "=acceleration_print", 
                            "limit_to_extruder": "=top_bottom_extruder_nr", 
                            "minimum_value_warning": "=100", 
                            "type": "float", 
                            "children": {}, 
                            "description": "The acceleration with which top/bottom layers are printed.", 
                            "default_value": "500"
                        }, 
                        "acceleration_support": {
                            "settable_per_mesh": "False", 
                            "maximum_value_warning": "=10000", 
                            "unit": "mm/s\u00b2", 
                            "settable_per_extruder": "True", 
                            "enabled": "=resolveOrValue('acceleration_enabled') and support_enable", 
                            "label": "Support Acceleration", 
                            "minimum_value": "=0.1", 
                            "value": "=acceleration_print", 
                            "limit_to_extruder": "=support_extruder_nr", 
                            "minimum_value_warning": "=100", 
                            "type": "float", 
                            "children": {
                                "acceleration_support_infill": {
                                    "settable_per_mesh": "False", 
                                    "maximum_value_warning": "=10000", 
                                    "unit": "mm/s\u00b2", 
                                    "settable_per_extruder": "True", 
                                    "enabled": "=resolveOrValue('acceleration_enabled') and support_enable", 
                                    "label": "Support Infill Acceleration", 
                                    "minimum_value": "=0.1", 
                                    "value": "=acceleration_support", 
                                    "limit_to_extruder": "=support_infill_extruder_nr", 
                                    "minimum_value_warning": "=100", 
                                    "type": "float", 
                                    "children": {}, 
                                    "description": "The acceleration with which the infill of support is printed.", 
                                    "default_value": "500"
                                }, 
                                "acceleration_support_interface": {
                                    "settable_per_mesh": "False", 
                                    "maximum_value_warning": "=10000", 
                                    "unit": "mm/s\u00b2", 
                                    "settable_per_extruder": "True", 
                                    "enabled": "=resolveOrValue('acceleration_enabled') and support_interface_enable and support_enable", 
                                    "label": "Support Interface Acceleration", 
                                    "minimum_value": "=0.1", 
                                    "value": "=acceleration_support", 
                                    "limit_to_extruder": "=support_interface_extruder_nr", 
                                    "minimum_value_warning": "=100", 
                                    "type": "float", 
                                    "children": {
                                        "acceleration_support_roof": {
                                            "settable_per_mesh": "False", 
                                            "maximum_value_warning": "=10000", 
                                            "unit": "mm/s\u00b2", 
                                            "settable_per_extruder": "True", 
                                            "enabled": "=acceleration_enabled and support_roof_enable and support_enable", 
                                            "label": "Support Roof Acceleration", 
                                            "minimum_value": "=0.1", 
                                            "value": "=extruderValue(support_roof_extruder_nr, 'acceleration_support_interface')", 
                                            "limit_to_extruder": "=support_roof_extruder_nr", 
                                            "minimum_value_warning": "=100", 
                                            "type": "float", 
                                            "children": {}, 
                                            "description": "The acceleration with which the roofs of support are printed. Printing them at lower acceleration can improve overhang quality.", 
                                            "default_value": "3000"
                                        }, 
                                        "acceleration_support_bottom": {
                                            "settable_per_mesh": "False", 
                                            "maximum_value_warning": "=10000", 
                                            "unit": "mm/s\u00b2", 
                                            "settable_per_extruder": "True", 
                                            "enabled": "=acceleration_enabled and support_bottom_enable and support_enable", 
                                            "label": "Support Floor Acceleration", 
                                            "minimum_value": "=0.1", 
                                            "value": "=extruderValue(support_bottom_extruder_nr, 'acceleration_support_interface')", 
                                            "limit_to_extruder": "=support_bottom_extruder_nr", 
                                            "minimum_value_warning": "=100", 
                                            "type": "float", 
                                            "children": {}, 
                                            "description": "The acceleration with which the floors of support are printed. Printing them at lower acceleration can improve adhesion of support on top of your model.", 
                                            "default_value": "3000"
                                        }
                                    }, 
                                    "description": "The acceleration with which the roofs and floors of support are printed. Printing them at lower acceleration can improve overhang quality.", 
                                    "default_value": "500"
                                }
                            }, 
                            "description": "The acceleration with which the support structure is printed.", 
                            "default_value": "500"
                        }, 
                        "acceleration_wall": {
                            "settable_per_mesh": "True", 
                            "maximum_value_warning": "=10000", 
                            "unit": "mm/s\u00b2", 
                            "enabled": "=resolveOrValue('acceleration_enabled')", 
                            "label": "Wall Acceleration", 
                            "value": "=acceleration_print", 
                            "minimum_value": "=0.1", 
                            "minimum_value_warning": "=100", 
                            "type": "float", 
                            "children": {
                                "acceleration_wall_x": {
                                    "settable_per_mesh": "True", 
                                    "maximum_value_warning": "=10000", 
                                    "unit": "mm/s\u00b2", 
                                    "enabled": "=resolveOrValue('acceleration_enabled')", 
                                    "label": "Inner Wall Acceleration", 
                                    "minimum_value": "=0.1", 
                                    "value": "=acceleration_wall", 
                                    "limit_to_extruder": "=wall_x_extruder_nr", 
                                    "minimum_value_warning": "=100", 
                                    "type": "float", 
                                    "children": {}, 
                                    "description": "The acceleration with which all inner walls are printed.", 
                                    "default_value": "500"
                                }, 
                                "acceleration_wall_0": {
                                    "settable_per_mesh": "True", 
                                    "maximum_value_warning": "=10000", 
                                    "unit": "mm/s\u00b2", 
                                    "enabled": "=resolveOrValue('acceleration_enabled')", 
                                    "label": "Outer Wall Acceleration", 
                                    "minimum_value": "=0.1", 
                                    "value": "=acceleration_wall", 
                                    "limit_to_extruder": "=wall_0_extruder_nr", 
                                    "minimum_value_warning": "=100", 
                                    "type": "float", 
                                    "children": {}, 
                                    "description": "The acceleration with which the outermost walls are printed.", 
                                    "default_value": "500"
                                }
                            }, 
                            "description": "The acceleration with which the walls are printed.", 
                            "default_value": "500"
                        }, 
                        "acceleration_roofing": {
                            "settable_per_mesh": "True", 
                            "maximum_value_warning": "=10000", 
                            "unit": "mm/s\u00b2", 
                            "enabled": "=resolveOrValue('acceleration_enabled') and roofing_layer_count > 0 and top_layers > 0", 
                            "label": "Top Surface Skin Acceleration", 
                            "minimum_value": "=0.1", 
                            "value": "=acceleration_topbottom", 
                            "limit_to_extruder": "=roofing_extruder_nr", 
                            "minimum_value_warning": "=100", 
                            "type": "float", 
                            "children": {}, 
                            "description": "The acceleration with which top surface skin layers are printed.", 
                            "default_value": "3000"
                        }, 
                        "acceleration_prime_tower": {
                            "settable_per_mesh": "False", 
                            "maximum_value_warning": "=10000", 
                            "unit": "mm/s\u00b2", 
                            "enabled": "=resolveOrValue('prime_tower_enable') and resolveOrValue('acceleration_enabled')", 
                            "label": "Prime Tower Acceleration", 
                            "value": "=acceleration_print", 
                            "minimum_value": "=0.1", 
                            "minimum_value_warning": "=100", 
                            "type": "float", 
                            "children": {}, 
                            "description": "The acceleration with which the prime tower is printed.", 
                            "default_value": "500"
                        }
                    }, 
                    "description": "The acceleration with which printing happens.", 
                    "label": "Print Acceleration", 
                    "enabled": "=resolveOrValue('acceleration_enabled')", 
                    "default_value": "500"
                }, 
                "jerk_skirt_brim": {
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=50", 
                    "unit": "mm/s", 
                    "enabled": "=resolveOrValue('jerk_enabled')", 
                    "label": "Skirt/Brim Jerk", 
                    "value": "=jerk_layer_0", 
                    "limit_to_extruder": "=adhesion_extruder_nr", 
                    "minimum_value": "=0", 
                    "type": "float", 
                    "children": {}, 
                    "description": "The maximum instantaneous velocity with which the skirt and brim are printed.", 
                    "default_value": "12"
                }, 
                "acceleration_enabled": {
                    "resolve": "=any(extruderValues('acceleration_enabled'))", 
                    "settable_per_mesh": "False", 
                    "type": "bool", 
                    "children": {}, 
                    "description": "Enables adjusting the print head acceleration. Increasing the accelerations can reduce printing time at the cost of print quality.", 
                    "label": "Enable Acceleration Control", 
                    "default_value": "False", 
                    "settable_per_extruder": "False"
                }, 
                "speed_layer_0": {
                    "minimum_value": "=0.1", 
                    "settable_per_mesh": "True", 
                    "maximum_value_warning": "=300", 
                    "type": "float", 
                    "unit": "mm/s", 
                    "children": {
                        "speed_travel_layer_0": {
                            "settable_per_mesh": "False", 
                            "maximum_value_warning": "=300", 
                            "maximum_value": "=math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)", 
                            "unit": "mm/s", 
                            "settable_per_extruder": "True", 
                            "label": "Initial Layer Travel Speed", 
                            "value": "=speed_layer_0 * speed_travel / speed_print", 
                            "minimum_value": "=0.1", 
                            "type": "float", 
                            "children": {}, 
                            "description": "The speed of travel moves in the initial layer. A lower value is advised to prevent pulling previously printed parts away from the build plate. The value of this setting can automatically be calculated from the ratio between the Travel Speed and the Print Speed.", 
                            "default_value": "60"
                        }, 
                        "speed_print_layer_0": {
                            "minimum_value": "=0.1", 
                            "settable_per_mesh": "True", 
                            "maximum_value_warning": "=300", 
                            "type": "float", 
                            "unit": "mm/s", 
                            "children": {}, 
                            "description": "The speed of printing for the initial layer. A lower value is advised to improve adhesion to the build plate.", 
                            "maximum_value": "=math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)", 
                            "label": "Initial Layer Print Speed", 
                            "value": "=speed_layer_0", 
                            "default_value": "30"
                        }
                    }, 
                    "description": "The speed for the initial layer. A lower value is advised to improve adhesion to the build plate.", 
                    "maximum_value": "=math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)", 
                    "label": "Initial Layer Speed", 
                    "value": "=speed_print * 30 / 60", 
                    "default_value": "30"
                }, 
                "jerk_layer_0": {
                    "default_value": "12", 
                    "minimum_value": "=0", 
                    "settable_per_mesh": "True", 
                    "maximum_value_warning": "=50", 
                    "type": "float", 
                    "unit": "mm/s", 
                    "children": {
                        "jerk_travel_layer_0": {
                            "settable_per_mesh": "False", 
                            "maximum_value_warning": "=50", 
                            "unit": "mm/s", 
                            "settable_per_extruder": "True", 
                            "enabled": "=resolveOrValue('jerk_enabled')", 
                            "label": "Initial Layer Travel Jerk", 
                            "value": "=jerk_layer_0 * jerk_travel / jerk_print", 
                            "minimum_value": "=0", 
                            "type": "float", 
                            "children": {}, 
                            "description": "The acceleration for travel moves in the initial layer.", 
                            "default_value": "12"
                        }, 
                        "jerk_print_layer_0": {
                            "default_value": "12", 
                            "minimum_value": "=0", 
                            "settable_per_mesh": "True", 
                            "maximum_value_warning": "=50", 
                            "type": "float", 
                            "unit": "mm/s", 
                            "children": {}, 
                            "description": "The maximum instantaneous velocity during the printing of the initial layer.", 
                            "label": "Initial Layer Print Jerk", 
                            "enabled": "=resolveOrValue('jerk_enabled')", 
                            "value": "=jerk_layer_0"
                        }
                    }, 
                    "description": "The print maximum instantaneous velocity for the initial layer.", 
                    "label": "Initial Layer Jerk", 
                    "enabled": "=resolveOrValue('jerk_enabled')", 
                    "value": "=jerk_print"
                }, 
                "speed_travel": {
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=300", 
                    "maximum_value": "=math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)", 
                    "unit": "mm/s", 
                    "settable_per_extruder": "True", 
                    "label": "Travel Speed", 
                    "value": "=speed_print if magic_spiralize else 120", 
                    "minimum_value": "=0.1", 
                    "type": "float", 
                    "children": {}, 
                    "description": "The speed at which travel moves are made.", 
                    "default_value": "120"
                }, 
                "jerk_enabled": {
                    "resolve": "=any(extruderValues('jerk_enabled'))", 
                    "settable_per_mesh": "False", 
                    "type": "bool", 
                    "children": {}, 
                    "description": "Enables adjusting the jerk of print head when the velocity in the X or Y axis changes. Increasing the jerk can reduce printing time at the cost of print quality.", 
                    "label": "Enable Jerk Control", 
                    "default_value": "False", 
                    "settable_per_extruder": "False"
                }, 
                "skirt_brim_speed": {
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=300", 
                    "maximum_value": "=math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)", 
                    "unit": "mm/s", 
                    "settable_per_extruder": "True", 
                    "enabled": "=resolveOrValue('adhesion_type') == 'skirt' or resolveOrValue('adhesion_type') == 'brim'", 
                    "label": "Skirt/Brim Speed", 
                    "value": "=speed_layer_0", 
                    "limit_to_extruder": "=adhesion_extruder_nr", 
                    "minimum_value": "=0.1", 
                    "type": "float", 
                    "children": {}, 
                    "description": "The speed at which the skirt and brim are printed. Normally this is done at the initial layer speed, but sometimes you might want to print the skirt or brim at a different speed.", 
                    "default_value": "30"
                }, 
                "speed_equalize_flow_max": {
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=150", 
                    "maximum_value": "=math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)", 
                    "unit": "mm/s", 
                    "settable_per_extruder": "True", 
                    "enabled": "=speed_equalize_flow_enabled", 
                    "label": "Maximum Speed for Flow Equalization", 
                    "minimum_value": "=0.1", 
                    "type": "float", 
                    "children": {}, 
                    "description": "Maximum print speed when adjusting the print speed in order to equalize flow.", 
                    "default_value": "150"
                }, 
                "acceleration_layer_0": {
                    "settable_per_mesh": "True", 
                    "maximum_value_warning": "=10000", 
                    "unit": "mm/s\u00b2", 
                    "enabled": "=resolveOrValue('acceleration_enabled')", 
                    "label": "Initial Layer Acceleration", 
                    "value": "=acceleration_print", 
                    "minimum_value": "=0.1", 
                    "minimum_value_warning": "=100", 
                    "type": "float", 
                    "children": {
                        "acceleration_print_layer_0": {
                            "settable_per_mesh": "True", 
                            "maximum_value_warning": "=10000", 
                            "unit": "mm/s\u00b2", 
                            "enabled": "=resolveOrValue('acceleration_enabled')", 
                            "label": "Initial Layer Print Acceleration", 
                            "value": "=acceleration_layer_0", 
                            "minimum_value": "=0.1", 
                            "minimum_value_warning": "=100", 
                            "type": "float", 
                            "children": {}, 
                            "description": "The acceleration during the printing of the initial layer.", 
                            "default_value": "500"
                        }, 
                        "acceleration_travel_layer_0": {
                            "settable_per_mesh": "False", 
                            "maximum_value_warning": "=10000", 
                            "unit": "mm/s\u00b2", 
                            "settable_per_extruder": "True", 
                            "enabled": "=resolveOrValue('acceleration_enabled')", 
                            "label": "Initial Layer Travel Acceleration", 
                            "minimum_value": "=0.1", 
                            "value": "=acceleration_layer_0 * acceleration_travel / acceleration_print", 
                            "minimum_value_warning": "=100", 
                            "type": "float", 
                            "children": {}, 
                            "description": "The acceleration for travel moves in the initial layer.", 
                            "default_value": "500"
                        }
                    }, 
                    "description": "The acceleration for the initial layer.", 
                    "default_value": "500"
                }, 
                "acceleration_skirt_brim": {
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=10000", 
                    "unit": "mm/s\u00b2", 
                    "enabled": "=resolveOrValue('acceleration_enabled')", 
                    "label": "Skirt/Brim Acceleration", 
                    "minimum_value": "=0.1", 
                    "value": "=acceleration_layer_0", 
                    "limit_to_extruder": "=adhesion_extruder_nr", 
                    "minimum_value_warning": "=100", 
                    "type": "float", 
                    "children": {}, 
                    "description": "The acceleration with which the skirt and brim are printed. Normally this is done with the initial layer acceleration, but sometimes you might want to print the skirt or brim at a different acceleration.", 
                    "default_value": "500"
                }, 
                "speed_print": {
                    "minimum_value": "=0.1", 
                    "settable_per_mesh": "True", 
                    "maximum_value_warning": "=150", 
                    "type": "float", 
                    "unit": "mm/s", 
                    "children": {
                        "speed_topbottom": {
                            "settable_per_mesh": "True", 
                            "maximum_value_warning": "=150", 
                            "maximum_value": "=math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)", 
                            "unit": "mm/s", 
                            "label": "Top/Bottom Speed", 
                            "value": "=speed_print / 2", 
                            "limit_to_extruder": "=top_bottom_extruder_nr", 
                            "minimum_value": "=0.1", 
                            "type": "float", 
                            "children": {}, 
                            "description": "The speed at which top/bottom layers are printed.", 
                            "default_value": "30"
                        }, 
                        "speed_prime_tower": {
                            "settable_per_mesh": "False", 
                            "maximum_value_warning": "=150", 
                            "maximum_value": "=math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)", 
                            "unit": "mm/s", 
                            "settable_per_extruder": "True", 
                            "enabled": "=resolveOrValue('prime_tower_enable')", 
                            "label": "Prime Tower Speed", 
                            "value": "=speed_print", 
                            "minimum_value": "=0.1", 
                            "type": "float", 
                            "children": {}, 
                            "description": "The speed at which the prime tower is printed. Printing the prime tower slower can make it more stable when the adhesion between the different filaments is suboptimal.", 
                            "default_value": "60"
                        }, 
                        "speed_support": {
                            "settable_per_mesh": "False", 
                            "maximum_value_warning": "=150", 
                            "maximum_value": "=math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)", 
                            "unit": "mm/s", 
                            "settable_per_extruder": "True", 
                            "enabled": "=support_enable", 
                            "label": "Support Speed", 
                            "value": "=speed_print", 
                            "limit_to_extruder": "=support_extruder_nr", 
                            "minimum_value": "=0.1", 
                            "type": "float", 
                            "children": {
                                "speed_support_interface": {
                                    "settable_per_mesh": "False", 
                                    "maximum_value_warning": "=150", 
                                    "maximum_value": "=math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)", 
                                    "unit": "mm/s", 
                                    "settable_per_extruder": "True", 
                                    "enabled": "=support_interface_enable and support_enable", 
                                    "label": "Support Interface Speed", 
                                    "value": "=speed_support / 1.5", 
                                    "limit_to_extruder": "=support_interface_extruder_nr", 
                                    "minimum_value": "=0.1", 
                                    "type": "float", 
                                    "children": {
                                        "speed_support_bottom": {
                                            "settable_per_mesh": "False", 
                                            "maximum_value_warning": "=150", 
                                            "maximum_value": "=math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)", 
                                            "unit": "mm/s", 
                                            "settable_per_extruder": "True", 
                                            "enabled": "=support_bottom_enable and support_enable", 
                                            "label": "Support Floor Speed", 
                                            "value": "=extruderValue(support_bottom_extruder_nr, 'speed_support_interface')", 
                                            "limit_to_extruder": "=support_bottom_extruder_nr", 
                                            "minimum_value": "=0.1", 
                                            "type": "float", 
                                            "children": {}, 
                                            "description": "The speed at which the floor of support is printed. Printing it at lower speed can improve adhesion of support on top of your model.", 
                                            "default_value": "40"
                                        }, 
                                        "speed_support_roof": {
                                            "settable_per_mesh": "False", 
                                            "maximum_value_warning": "=150", 
                                            "maximum_value": "=math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)", 
                                            "unit": "mm/s", 
                                            "settable_per_extruder": "True", 
                                            "enabled": "=support_roof_enable and support_enable", 
                                            "label": "Support Roof Speed", 
                                            "value": "=extruderValue(support_roof_extruder_nr, 'speed_support_interface')", 
                                            "limit_to_extruder": "=support_roof_extruder_nr", 
                                            "minimum_value": "=0.1", 
                                            "type": "float", 
                                            "children": {}, 
                                            "description": "The speed at which the roofs of support are printed. Printing them at lower speeds can improve overhang quality.", 
                                            "default_value": "40"
                                        }
                                    }, 
                                    "description": "The speed at which the roofs and floors of support are printed. Printing them at lower speeds can improve overhang quality.", 
                                    "default_value": "40"
                                }, 
                                "speed_support_infill": {
                                    "settable_per_mesh": "False", 
                                    "maximum_value_warning": "=150", 
                                    "maximum_value": "=math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)", 
                                    "unit": "mm/s", 
                                    "settable_per_extruder": "True", 
                                    "enabled": "=support_enable", 
                                    "label": "Support Infill Speed", 
                                    "value": "=speed_support", 
                                    "limit_to_extruder": "=support_infill_extruder_nr", 
                                    "minimum_value": "=0.1", 
                                    "type": "float", 
                                    "children": {}, 
                                    "description": "The speed at which the infill of support is printed. Printing the infill at lower speeds improves stability.", 
                                    "default_value": "60"
                                }
                            }, 
                            "description": "The speed at which the support structure is printed. Printing support at higher speeds can greatly reduce printing time. The surface quality of the support structure is not important since it is removed after printing.", 
                            "default_value": "60"
                        }, 
                        "speed_wall": {
                            "minimum_value": "=0.1", 
                            "settable_per_mesh": "True", 
                            "maximum_value_warning": "=150", 
                            "type": "float", 
                            "unit": "mm/s", 
                            "children": {
                                "speed_wall_0": {
                                    "settable_per_mesh": "True", 
                                    "maximum_value_warning": "=150", 
                                    "maximum_value": "=math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)", 
                                    "unit": "mm/s", 
                                    "label": "Outer Wall Speed", 
                                    "value": "=speed_wall", 
                                    "limit_to_extruder": "=wall_0_extruder_nr", 
                                    "minimum_value": "=0.1", 
                                    "type": "float", 
                                    "children": {}, 
                                    "description": "The speed at which the outermost walls are printed. Printing the outer wall at a lower speed improves the final skin quality. However, having a large difference between the inner wall speed and the outer wall speed will affect quality in a negative way.", 
                                    "default_value": "30"
                                }, 
                                "speed_wall_x": {
                                    "settable_per_mesh": "True", 
                                    "maximum_value_warning": "=150", 
                                    "maximum_value": "=math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)", 
                                    "unit": "mm/s", 
                                    "label": "Inner Wall Speed", 
                                    "value": "=speed_wall * 2", 
                                    "limit_to_extruder": "=wall_x_extruder_nr", 
                                    "minimum_value": "=0.1", 
                                    "type": "float", 
                                    "children": {}, 
                                    "description": "The speed at which all inner walls are printed. Printing the inner wall faster than the outer wall will reduce printing time. It works well to set this in between the outer wall speed and the infill speed.", 
                                    "default_value": "60"
                                }
                            }, 
                            "description": "The speed at which the walls are printed.", 
                            "maximum_value": "=math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)", 
                            "label": "Wall Speed", 
                            "value": "=speed_print / 2", 
                            "default_value": "30"
                        }, 
                        "speed_roofing": {
                            "settable_per_mesh": "True", 
                            "maximum_value_warning": "=150", 
                            "maximum_value": "=math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)", 
                            "unit": "mm/s", 
                            "enabled": "=roofing_layer_count > 0 and top_layers > 0", 
                            "label": "Top Surface Skin Speed", 
                            "value": "=speed_topbottom", 
                            "limit_to_extruder": "=roofing_extruder_nr", 
                            "minimum_value": "=0.1", 
                            "type": "float", 
                            "children": {}, 
                            "description": "The speed at which top surface skin layers are printed.", 
                            "default_value": "25"
                        }, 
                        "speed_infill": {
                            "settable_per_mesh": "True", 
                            "maximum_value_warning": "=150", 
                            "maximum_value": "=math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)", 
                            "unit": "mm/s", 
                            "enabled": "=infill_sparse_density > 0", 
                            "label": "Infill Speed", 
                            "value": "=speed_print", 
                            "limit_to_extruder": "=infill_extruder_nr", 
                            "minimum_value": "=0.1", 
                            "type": "float", 
                            "children": {}, 
                            "description": "The speed at which infill is printed.", 
                            "default_value": "60"
                        }
                    }, 
                    "description": "The speed at which printing happens.", 
                    "maximum_value": "=math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)", 
                    "label": "Print Speed", 
                    "default_value": "60"
                }, 
                "speed_slowdown_layers": {
                    "resolve": "=round(sum(extruderValues('speed_slowdown_layers')) / len(extruderValues('speed_slowdown_layers')))", 
                    "minimum_value": "=0", 
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=3.2 / resolveOrValue('layer_height')", 
                    "type": "int", 
                    "children": {}, 
                    "description": "The first few layers are printed slower than the rest of the model, to get better adhesion to the build plate and improve the overall success rate of prints. The speed is gradually increased over these layers.", 
                    "label": "Number of Slower Layers", 
                    "default_value": "2", 
                    "settable_per_extruder": "False"
                }
            }, 
            "description": "Speed", 
            "label": "Speed", 
            "type": "category"
        }, 
        "machine_settings": {
            "icon": "category_machine", 
            "children": {
                "machine_wipe_gcode": {
                    "settable_per_mesh": "False", 
                    "type": "str", 
                    "default_value_from_file": "taz6_twool_wipe_sequence", 
                    "children": {}, 
                    "description": "", 
                    "settable_per_meshgroup": "False", 
                    "label": "Wipe GCode", 
                    "settable_per_extruder": "False"
                }, 
                "machine_nozzle_size": {
                    "minimum_value": "=0.001", 
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=10", 
                    "type": "float", 
                    "unit": "mm", 
                    "children": {}, 
                    "description": "The inner diameter of the nozzle. Change this setting when using a non-standard nozzle size.", 
                    "label": "Nozzle Diameter", 
                    "default_value": "0.5", 
                    "settable_per_extruder": "True"
                }, 
                "machine_heat_zone_length": {
                    "settable_per_mesh": "False", 
                    "type": "float", 
                    "children": {}, 
                    "description": "The distance from the tip of the nozzle in which heat from the nozzle is transferred to the filament.", 
                    "settable_per_meshgroup": "False", 
                    "label": "Heat zone length", 
                    "default_value": "16", 
                    "settable_per_extruder": "True"
                }, 
                "extruder_prime_pos_abs": {
                    "settable_per_mesh": "False", 
                    "type": "bool", 
                    "children": {}, 
                    "description": "Make the extruder prime position absolute rather than relative to the last-known location of the head.", 
                    "label": "Absolute Extruder Prime Position", 
                    "default_value": "False", 
                    "settable_per_extruder": "True"
                }, 
                "machine_nozzle_heat_up_speed": {
                    "settable_per_mesh": "False", 
                    "type": "float", 
                    "unit": "\u00b0C/s", 
                    "children": {}, 
                    "enabled": "=machine_nozzle_temp_enabled", 
                    "label": "Heat up speed", 
                    "description": "The speed (\u00b0C/s) by which the nozzle heats up averaged over the window of normal printing temperatures and the standby temperature.", 
                    "settable_per_extruder": "True", 
                    "default_value": "2.0"
                }, 
                "extruder_prime_pos_z": {
                    "minimum_value_warning": "=0", 
                    "settable_per_mesh": "False", 
                    "type": "float", 
                    "unit": "mm", 
                    "children": {}, 
                    "description": "The Z coordinate of the position where the nozzle primes at the start of printing.", 
                    "maximum_value": "=machine_height", 
                    "label": "Extruder Prime Z Position", 
                    "default_value": "0", 
                    "settable_per_extruder": "True"
                }, 
                "machine_use_extruder_offset_to_offset_coords": {
                    "settable_per_mesh": "False", 
                    "type": "bool", 
                    "children": {}, 
                    "description": "Apply the extruder offset to the coordinate system.", 
                    "settable_per_meshgroup": "False", 
                    "label": "Offset With Extruder", 
                    "default_value": "True", 
                    "settable_per_extruder": "False"
                }, 
                "machine_baudrate": {
                    "enabled": "=False", 
                    "children": {}, 
                    "description": "Baudrate", 
                    "type": "str", 
                    "label": "Machine Baudrate", 
                    "default_value": "250000"
                }, 
                "machine_has_lcd": {
                    "type": "bool", 
                    "children": {}, 
                    "enabled": "=False", 
                    "label": "LCD", 
                    "description": "LCD", 
                    "default_value": "True"
                }, 
                "machine_max_acceleration_x": {
                    "settable_per_mesh": "False", 
                    "type": "float", 
                    "unit": "mm/s\u00b2", 
                    "children": {}, 
                    "description": "Maximum acceleration for the motor of the X-direction", 
                    "settable_per_meshgroup": "False", 
                    "label": "Maximum Acceleration X", 
                    "default_value": "9000", 
                    "settable_per_extruder": "False"
                }, 
                "machine_gcode_flavor": {
                    "settable_per_mesh": "False", 
                    "type": "enum", 
                    "options": "OrderedDict([('RepRap (Marlin/Sprinter)', 'Marlin'), ('RepRap (Volumetric)', 'Marlin (Volumetric)'), ('RepRap (RepRap)', 'RepRap'), ('UltiGCode', 'Ultimaker 2'), ('Griffin', 'Griffin'), ('Makerbot', 'Makerbot'), ('BFB', 'Bits from Bytes'), ('MACH3', 'Mach3'), ('Repetier', 'Repetier')])", 
                    "children": {}, 
                    "description": "The type of gcode to be generated.", 
                    "settable_per_meshgroup": "False", 
                    "label": "Gcode flavour", 
                    "default_value": "RepRap (Marlin/Sprinter)", 
                    "settable_per_extruder": "False"
                }, 
                "machine_show_variants": {
                    "settable_per_mesh": "False", 
                    "type": "bool", 
                    "children": {}, 
                    "description": "Whether to show the different variants of this machine, which are described in separate json files.", 
                    "settable_per_meshgroup": "False", 
                    "label": "Show Machine Variants", 
                    "default_value": "False", 
                    "settable_per_extruder": "False"
                }, 
                "material_bed_temp_wait": {
                    "settable_per_mesh": "False", 
                    "type": "bool", 
                    "children": {}, 
                    "description": "Whether to insert a command to wait until the build plate temperature is reached at the start.", 
                    "settable_per_meshgroup": "False", 
                    "label": "Wait for Build Plate Heatup", 
                    "default_value": "True", 
                    "settable_per_extruder": "False"
                }, 
                "machine_max_acceleration_e": {
                    "settable_per_mesh": "False", 
                    "type": "float", 
                    "unit": "mm/s\u00b2", 
                    "children": {}, 
                    "description": "Maximum acceleration for the motor of the filament.", 
                    "settable_per_meshgroup": "False", 
                    "label": "Maximum Filament Acceleration", 
                    "default_value": "1000", 
                    "settable_per_extruder": "False"
                }, 
                "material_guid": {
                    "enabled": "=False", 
                    "children": {}, 
                    "description": "GUID of the material. This is set automatically. ", 
                    "type": "str", 
                    "label": "Material GUID", 
                    "default_value": ""
                }, 
                "machine_acceleration": {
                    "settable_per_mesh": "False", 
                    "type": "float", 
                    "unit": "mm/s\u00b2", 
                    "children": {}, 
                    "description": "The default acceleration of print head movement.", 
                    "settable_per_meshgroup": "False", 
                    "label": "Default Acceleration", 
                    "default_value": "500", 
                    "settable_per_extruder": "False"
                }, 
                "machine_max_feedrate_y": {
                    "settable_per_mesh": "False", 
                    "type": "float", 
                    "unit": "mm/s", 
                    "children": {}, 
                    "description": "The maximum speed for the motor of the Y-direction.", 
                    "settable_per_meshgroup": "False", 
                    "label": "Maximum Speed Y", 
                    "default_value": "800", 
                    "settable_per_extruder": "False"
                }, 
                "machine_nozzle_expansion_angle": {
                    "minimum_value": "=1", 
                    "settable_per_mesh": "False", 
                    "type": "int", 
                    "unit": "\u00b0", 
                    "children": {}, 
                    "description": "The angle between the horizontal plane and the conical part right above the tip of the nozzle.", 
                    "settable_per_meshgroup": "False", 
                    "label": "Nozzle angle", 
                    "maximum_value": "=89", 
                    "settable_per_extruder": "False", 
                    "default_value": "45"
                }, 
                "machine_name": {
                    "settable_per_mesh": "False", 
                    "type": "str", 
                    "children": {}, 
                    "description": "The name of your 3D printer model.", 
                    "settable_per_meshgroup": "False", 
                    "label": "Machine Type", 
                    "default_value": "LulzBot TAZ 6", 
                    "settable_per_extruder": "False"
                }, 
                "machine_end_gcode": {
                    "settable_per_mesh": "False", 
                    "type": "str", 
                    "default_value_from_file": "twool_head_end_gcode_taz6", 
                    "children": {}, 
                    "description": "Gcode commands to be executed at the very end - separated by \\n.", 
                    "settable_per_meshgroup": "False", 
                    "label": "End GCode", 
                    "default_value": "M104 S0\nM140 S0\n;Retract the filament\nG92 E1\nG1 E-1 F300\nG28 X0 Y0\nM84", 
                    "settable_per_extruder": "False"
                }, 
                "machine_nozzle_id": {
                    "settable_per_mesh": "False", 
                    "type": "str", 
                    "children": {}, 
                    "description": "The nozzle ID for an extruder train, such as \"AA 0.4\" and \"BB 0.8\".", 
                    "label": "Nozzle ID", 
                    "default_value": "unknown", 
                    "settable_per_extruder": "True"
                }, 
                "machine_start_gcode": {
                    "settable_per_mesh": "False", 
                    "type": "str", 
                    "default_value_from_file": "twool_head_start_gcode_taz6", 
                    "children": {}, 
                    "description": "Gcode commands to be executed at the very start - separated by \\n.", 
                    "settable_per_meshgroup": "False", 
                    "label": "Start GCode", 
                    "default_value": "G28 ;Home\nG1 Z15.0 F6000 ;Move the platform down 15mm\n;Prime the extruder\nG92 E0\nG1 F200 E3\nG92 E0", 
                    "settable_per_extruder": "False"
                }, 
                "machine_height": {
                    "settable_per_mesh": "False", 
                    "type": "float", 
                    "children": {}, 
                    "description": "The height (Z-direction) of the printable area.", 
                    "settable_per_meshgroup": "False", 
                    "label": "Machine Height", 
                    "default_value": "250", 
                    "settable_per_extruder": "False"
                }, 
                "machine_center_is_zero": {
                    "settable_per_mesh": "False", 
                    "type": "bool", 
                    "children": {}, 
                    "description": "Whether the X/Y coordinates of the zero position of the printer is at the center of the printable area.", 
                    "settable_per_meshgroup": "False", 
                    "label": "Is Center Origin", 
                    "default_value": "False", 
                    "settable_per_extruder": "False"
                }, 
                "machine_max_acceleration_z": {
                    "settable_per_mesh": "False", 
                    "type": "float", 
                    "unit": "mm/s\u00b2", 
                    "children": {}, 
                    "description": "Maximum acceleration for the motor of the Z-direction.", 
                    "settable_per_meshgroup": "False", 
                    "label": "Maximum Acceleration Z", 
                    "default_value": "100", 
                    "settable_per_extruder": "False"
                }, 
                "machine_nozzle_offset_x": {
                    "settable_per_mesh": "False", 
                    "type": "float", 
                    "unit": "mm", 
                    "children": {}, 
                    "enabled": "=False", 
                    "label": "Nozzle X Offset", 
                    "description": "The x-coordinate of the offset of the nozzle.", 
                    "settable_per_extruder": "True", 
                    "default_value": "0"
                }, 
                "machine_max_feedrate_z": {
                    "settable_per_mesh": "False", 
                    "type": "float", 
                    "unit": "mm/s", 
                    "children": {}, 
                    "description": "The maximum speed for the motor of the Z-direction.", 
                    "settable_per_meshgroup": "False", 
                    "label": "Maximum Speed Z", 
                    "default_value": "3", 
                    "settable_per_extruder": "False"
                }, 
                "machine_disallowed_areas": {
                    "settable_per_mesh": "False", 
                    "type": "polygons", 
                    "children": {}, 
                    "description": "A list of polygons with areas the print head is not allowed to enter.", 
                    "settable_per_meshgroup": "False", 
                    "label": "Disallowed areas", 
                    "default_value": "[]", 
                    "settable_per_extruder": "False"
                }, 
                "machine_head_with_fans_polygon": {
                    "settable_per_mesh": "False", 
                    "type": "polygon", 
                    "children": {}, 
                    "description": "A 2D silhouette of the print head (fan caps included).", 
                    "settable_per_meshgroup": "False", 
                    "label": "Machine head & Fan polygon", 
                    "default_value": "[[-20, 10], [10, 10], [10, -10], [-20, -10]]", 
                    "settable_per_extruder": "False"
                }, 
                "machine_nozzle_temp_enabled": {
                    "settable_per_mesh": "False", 
                    "type": "bool", 
                    "children": {}, 
                    "description": "Whether to control temperature from Cura. Turn this off to control nozzle temperature from outside of Cura.", 
                    "settable_per_meshgroup": "False", 
                    "label": "Enable Nozzle Temperature Control", 
                    "value": "=machine_gcode_flavor != \"UltiGCode\"", 
                    "settable_per_extruder": "True", 
                    "default_value": "True"
                }, 
                "machine_firmware_retract": {
                    "settable_per_mesh": "False", 
                    "type": "bool", 
                    "children": {}, 
                    "description": "Whether to use firmware retract commands (G10/G11) instead of using the E property in G1 commands to retract the material.", 
                    "settable_per_meshgroup": "False", 
                    "label": "Firmware Retraction", 
                    "value": "=machine_gcode_flavor == 'RepRap (Volumetric)' or machine_gcode_flavor == 'UltiGCode' or machine_gcode_flavor == 'BFB'", 
                    "settable_per_extruder": "False", 
                    "default_value": "False"
                }, 
                "machine_max_jerk_xy": {
                    "minimum_value": "=0", 
                    "settable_per_mesh": "False", 
                    "type": "float", 
                    "unit": "mm/s", 
                    "children": {}, 
                    "description": "Default jerk for movement in the horizontal plane.", 
                    "settable_per_meshgroup": "False", 
                    "label": "Default X-Y Jerk", 
                    "default_value": "20.0", 
                    "settable_per_extruder": "False"
                }, 
                "machine_max_acceleration_y": {
                    "settable_per_mesh": "False", 
                    "type": "float", 
                    "unit": "mm/s\u00b2", 
                    "children": {}, 
                    "description": "Maximum acceleration for the motor of the Y-direction.", 
                    "settable_per_meshgroup": "False", 
                    "label": "Maximum Acceleration Y", 
                    "default_value": "9000", 
                    "settable_per_extruder": "False"
                }, 
                "machine_depth": {
                    "settable_per_mesh": "False", 
                    "type": "float", 
                    "children": {}, 
                    "description": "The depth (Y-direction) of the printable area.", 
                    "settable_per_meshgroup": "False", 
                    "label": "Machine Depth", 
                    "default_value": "280", 
                    "settable_per_extruder": "False"
                }, 
                "machine_max_jerk_z": {
                    "minimum_value": "=0", 
                    "settable_per_mesh": "False", 
                    "type": "float", 
                    "unit": "mm/s", 
                    "children": {}, 
                    "description": "Default jerk for the motor of the Z-direction.", 
                    "settable_per_meshgroup": "False", 
                    "label": "Default Z Jerk", 
                    "default_value": "0.4", 
                    "settable_per_extruder": "False"
                }, 
                "material_bed_temp_prepend": {
                    "settable_per_mesh": "False", 
                    "type": "bool", 
                    "children": {}, 
                    "description": "Whether to include build plate temperature commands at the start of the gcode. When the start_gcode already contains build plate temperature commands Cura frontend will automatically disable this setting.", 
                    "settable_per_meshgroup": "False", 
                    "label": "Include Build Plate Temperature", 
                    "default_value": "True", 
                    "settable_per_extruder": "False"
                }, 
                "machine_nozzle_offset_y": {
                    "settable_per_mesh": "False", 
                    "type": "float", 
                    "unit": "mm", 
                    "children": {}, 
                    "enabled": "=False", 
                    "label": "Nozzle Y Offset", 
                    "description": "The y-coordinate of the offset of the nozzle.", 
                    "settable_per_extruder": "True", 
                    "default_value": "0"
                }, 
                "machine_nozzle_head_distance": {
                    "settable_per_mesh": "False", 
                    "type": "float", 
                    "children": {}, 
                    "description": "The height difference between the tip of the nozzle and the lowest part of the print head.", 
                    "settable_per_meshgroup": "False", 
                    "label": "Nozzle length", 
                    "default_value": "3", 
                    "settable_per_extruder": "True"
                }, 
                "nozzle_disallowed_areas": {
                    "settable_per_mesh": "False", 
                    "type": "polygons", 
                    "children": {}, 
                    "description": "A list of polygons with areas the nozzle is not allowed to enter.", 
                    "settable_per_meshgroup": "False", 
                    "label": "Nozzle Disallowed Areas", 
                    "default_value": "[]", 
                    "settable_per_extruder": "False"
                }, 
                "machine_max_feedrate_x": {
                    "settable_per_mesh": "False", 
                    "type": "float", 
                    "unit": "mm/s", 
                    "children": {}, 
                    "description": "The maximum speed for the motor of the X-direction.", 
                    "settable_per_meshgroup": "False", 
                    "label": "Maximum Speed X", 
                    "default_value": "800", 
                    "settable_per_extruder": "False"
                }, 
                "material_print_temp_wait": {
                    "settable_per_mesh": "False", 
                    "type": "bool", 
                    "children": {}, 
                    "enabled": "=machine_nozzle_temp_enabled", 
                    "settable_per_meshgroup": "False", 
                    "label": "Wait for Nozzle Heatup", 
                    "description": "Whether to wait until the nozzle temperature is reached at the start.", 
                    "settable_per_extruder": "False", 
                    "default_value": "True"
                }, 
                "machine_port": {
                    "enabled": "=False", 
                    "children": {}, 
                    "description": "Port", 
                    "type": "str", 
                    "label": "Machine Port", 
                    "default_value": "AUTO"
                }, 
                "machine_max_feedrate_e": {
                    "settable_per_mesh": "False", 
                    "type": "float", 
                    "unit": "mm/s", 
                    "children": {}, 
                    "description": "The maximum speed of the filament.", 
                    "settable_per_meshgroup": "False", 
                    "label": "Maximum Feedrate", 
                    "default_value": "40", 
                    "settable_per_extruder": "False"
                }, 
                "machine_heated_bed": {
                    "settable_per_mesh": "False", 
                    "type": "bool", 
                    "children": {}, 
                    "description": "Whether the machine has a heated build plate present.", 
                    "settable_per_meshgroup": "False", 
                    "label": "Has Heated Build Plate", 
                    "default_value": "True", 
                    "settable_per_extruder": "False"
                }, 
                "machine_nozzle_tip_outer_diameter": {
                    "settable_per_mesh": "False", 
                    "settable_globally": "False", 
                    "type": "float", 
                    "children": {}, 
                    "description": "The outer diameter of the tip of the nozzle.", 
                    "settable_per_meshgroup": "False", 
                    "label": "Outer nozzle diameter", 
                    "default_value": "1", 
                    "settable_per_extruder": "True"
                }, 
                "machine_head_polygon": {
                    "settable_per_mesh": "False", 
                    "type": "polygon", 
                    "children": {}, 
                    "description": "A 2D silhouette of the print head (fan caps excluded).", 
                    "settable_per_meshgroup": "False", 
                    "label": "Machine head polygon", 
                    "default_value": "[[-1, 1], [-1, -1], [1, -1], [1, 1]]", 
                    "settable_per_extruder": "False"
                }, 
                "material_print_temp_prepend": {
                    "settable_per_mesh": "False", 
                    "type": "bool", 
                    "children": {}, 
                    "enabled": "=machine_nozzle_temp_enabled", 
                    "settable_per_meshgroup": "False", 
                    "label": "Include Material Temperatures", 
                    "description": "Whether to include nozzle temperature commands at the start of the gcode. When the start_gcode already contains nozzle temperature commands Cura frontend will automatically disable this setting.", 
                    "settable_per_extruder": "False", 
                    "default_value": "True"
                }, 
                "machine_minimum_feedrate": {
                    "settable_per_mesh": "False", 
                    "type": "float", 
                    "unit": "mm/s", 
                    "children": {}, 
                    "description": "The minimal movement speed of the print head.", 
                    "settable_per_meshgroup": "False", 
                    "label": "Minimum Feedrate", 
                    "default_value": "0.0", 
                    "settable_per_extruder": "False"
                }, 
                "machine_extruder_count": {
                    "minimum_value": "=1", 
                    "settable_per_mesh": "False", 
                    "type": "int", 
                    "maximum_value": "=16", 
                    "children": {}, 
                    "description": "Number of extruder trains. An extruder train is the combination of a feeder, bowden tube, and nozzle.", 
                    "settable_per_meshgroup": "False", 
                    "label": "Number of Extruders", 
                    "default_value": "1", 
                    "settable_per_extruder": "False"
                }, 
                "firmware_machine_type": {
                    "resolve": "='LulzBot TAZ 6'", 
                    "type": "str", 
                    "children": {}, 
                    "description": "firmware type", 
                    "label": "firmware type", 
                    "enabled": "=False", 
                    "default_value": ""
                }, 
                "machine_shape": {
                    "settable_per_mesh": "False", 
                    "type": "enum", 
                    "options": "OrderedDict([('rectangular', 'Rectangular'), ('elliptic', 'Elliptic')])", 
                    "children": {}, 
                    "description": "The shape of the build plate without taking unprintable areas into account.", 
                    "settable_per_meshgroup": "False", 
                    "label": "Build Plate Shape", 
                    "default_value": "rectangular", 
                    "settable_per_extruder": "False"
                }, 
                "machine_min_cool_heat_time_window": {
                    "settable_per_mesh": "False", 
                    "type": "float", 
                    "unit": "s", 
                    "children": {}, 
                    "enabled": "=machine_nozzle_temp_enabled", 
                    "label": "Minimal Time Standby Temperature", 
                    "description": "The minimal time an extruder has to be inactive before the nozzle is cooled. Only when an extruder is not used for longer than this time will it be allowed to cool down to the standby temperature.", 
                    "settable_per_extruder": "True", 
                    "default_value": "50.0"
                }, 
                "gantry_height": {
                    "settable_per_mesh": "False", 
                    "type": "float", 
                    "children": {}, 
                    "description": "The height difference between the tip of the nozzle and the gantry system (X and Y axes).", 
                    "settable_per_meshgroup": "False", 
                    "label": "Gantry height", 
                    "default_value": "9999999", 
                    "settable_per_extruder": "False"
                }, 
                "machine_nozzle_cool_down_speed": {
                    "settable_per_mesh": "False", 
                    "type": "float", 
                    "unit": "\u00b0C/s", 
                    "children": {}, 
                    "enabled": "=machine_nozzle_temp_enabled", 
                    "label": "Cool down speed", 
                    "description": "The speed (\u00b0C/s) by which the nozzle cools down averaged over the window of normal printing temperatures and the standby temperature.", 
                    "settable_per_extruder": "True", 
                    "default_value": "2.0"
                }, 
                "machine_width": {
                    "settable_per_mesh": "False", 
                    "type": "float", 
                    "children": {}, 
                    "description": "The width (X-direction) of the printable area.", 
                    "settable_per_meshgroup": "False", 
                    "label": "Machine Width", 
                    "default_value": "140", 
                    "settable_per_extruder": "False"
                }, 
                "machine_filament_park_distance": {
                    "settable_per_mesh": "False", 
                    "type": "float", 
                    "children": {}, 
                    "description": "The distance from the tip of the nozzle where to park the filament when an extruder is no longer used.", 
                    "settable_per_meshgroup": "False", 
                    "label": "Filament Park Distance", 
                    "value": "=machine_heat_zone_length", 
                    "settable_per_extruder": "True", 
                    "default_value": "16"
                }, 
                "machine_level_x_axis_gcode": {
                    "settable_per_mesh": "False", 
                    "type": "str", 
                    "children": {}, 
                    "description": "G", 
                    "settable_per_meshgroup": "False", 
                    "label": "Level X Axis GCode", 
                    "settable_per_extruder": "False"
                }, 
                "machine_max_jerk_e": {
                    "minimum_value": "=0", 
                    "settable_per_mesh": "False", 
                    "type": "float", 
                    "unit": "mm/s", 
                    "children": {}, 
                    "description": "Default jerk for the motor of the filament.", 
                    "settable_per_meshgroup": "False", 
                    "label": "Default Filament Jerk", 
                    "default_value": "5.0", 
                    "settable_per_extruder": "False"
                }
            }, 
            "description": "Machine specific settings", 
            "label": "Machine", 
            "type": "category"
        }, 
        "infill": {
            "icon": "category_infill", 
            "children": {
                "min_infill_area": {
                    "limit_to_extruder": "=infill_extruder_nr", 
                    "minimum_value": "=0", 
                    "settable_per_mesh": "True", 
                    "type": "float", 
                    "unit": "mm\u00b2", 
                    "children": {}, 
                    "description": "Don't generate areas of infill smaller than this (use skin instead).", 
                    "label": "Minimum Infill Area", 
                    "default_value": "0"
                }, 
                "zig_zaggify_infill": {
                    "settable_per_mesh": "True", 
                    "type": "bool", 
                    "children": {}, 
                    "description": "Connect the ends where the infill pattern meets the inner wall using a line which follows the shape of the inner wall. Enabling this setting can make the infill adhere to the walls better and reduce the effects of infill on the quality of vertical surfaces. Disabling this setting reduces the amount of material used.", 
                    "label": "Connect Infill Lines", 
                    "enabled": "=infill_pattern == 'cross' or infill_pattern == 'cross_3d'", 
                    "default_value": "True"
                }, 
                "infill_pattern": {
                    "limit_to_extruder": "=infill_extruder_nr", 
                    "settable_per_mesh": "True", 
                    "type": "enum", 
                    "options": "OrderedDict([('grid', 'Grid'), ('lines', 'Lines'), ('triangles', 'Triangles'), ('trihexagon', 'Tri-Hexagon'), ('cubic', 'Cubic'), ('cubicsubdiv', 'Cubic Subdivision'), ('tetrahedral', 'Octet'), ('quarter_cubic', 'Quarter Cubic'), ('concentric', 'Concentric'), ('concentric_3d', 'Concentric 3D'), ('zigzag', 'Zig Zag'), ('cross', 'Cross'), ('cross_3d', 'Cross 3D')])", 
                    "children": {}, 
                    "description": "The pattern of the infill material of the print. The line and zig zag infill swap direction on alternate layers, reducing material cost. The grid, triangle, tri-hexagon, cubic, octet, quarter cubic, cross and concentric patterns are fully printed every layer. Cubic, quarter cubic and octet infill change with every layer to provide a more equal distribution of strength over each direction.", 
                    "default_value": "grid", 
                    "label": "Infill Pattern", 
                    "enabled": "=infill_sparse_density > 0", 
                    "value": "='lines' if infill_sparse_density > 25 else 'grid'"
                }, 
                "infill_extruder_nr": {
                    "settable_per_mesh": "False", 
                    "settable_globally": "True", 
                    "type": "optional_extruder", 
                    "children": {}, 
                    "enabled": "=machine_extruder_count > 1", 
                    "settable_per_meshgroup": "True", 
                    "label": "Infill Extruder", 
                    "description": "The extruder train used for printing infill. This is used in multi-extrusion.", 
                    "settable_per_extruder": "False", 
                    "default_value": "-1"
                }, 
                "infill_angles": {
                    "limit_to_extruder": "=infill_extruder_nr", 
                    "settable_per_mesh": "True", 
                    "type": "[int]", 
                    "children": {}, 
                    "enabled": "=infill_pattern != 'concentric' and infill_pattern != 'concentric_3d' and infill_pattern != 'cubicsubdiv' and infill_sparse_density > 0", 
                    "label": "Infill Line Directions", 
                    "description": "A list of integer line directions to use. Elements from the list are used sequentially as the layers progress and when the end of the list is reached, it starts at the beginning again. The list items are separated by commas and the whole list is contained in square brackets. Default is an empty list which means use the traditional default angles (45 and 135 degrees for the lines and zig zag patterns and 45 degrees for all other patterns).", 
                    "default_value": "[ ]"
                }, 
                "sub_div_rad_add": {
                    "settable_per_mesh": "True", 
                    "maximum_value_warning": "=5 * infill_line_distance", 
                    "unit": "mm", 
                    "enabled": "=infill_sparse_density > 0 and infill_pattern == 'cubicsubdiv'", 
                    "label": "Cubic Subdivision Shell", 
                    "value": "=wall_line_width_x", 
                    "limit_to_extruder": "=infill_extruder_nr", 
                    "minimum_value_warning": "=-1 * infill_line_distance", 
                    "type": "float", 
                    "children": {}, 
                    "description": "An addition to the radius from the center of each cube to check for the boundary of the model, as to decide whether this cube should be subdivided. Larger values lead to a thicker shell of small cubes near the boundary of the model.", 
                    "default_value": "0.4"
                }, 
                "infill_overlap": {
                    "settable_per_mesh": "True", 
                    "maximum_value_warning": "=100", 
                    "unit": "%", 
                    "enabled": "=infill_sparse_density > 0 and infill_pattern != 'concentric'", 
                    "label": "Infill Overlap Percentage", 
                    "value": "=10 if infill_sparse_density < 95 and infill_pattern != 'concentric' else 0", 
                    "limit_to_extruder": "=infill_extruder_nr", 
                    "minimum_value_warning": "=-50", 
                    "type": "float", 
                    "children": {
                        "infill_overlap_mm": {
                            "default_value": "0.04", 
                            "minimum_value_warning": "=-0.5 * machine_nozzle_size", 
                            "settable_per_mesh": "True", 
                            "maximum_value_warning": "=machine_nozzle_size", 
                            "type": "float", 
                            "unit": "mm", 
                            "children": {}, 
                            "description": "The amount of overlap between the infill and the walls. A slight overlap allows the walls to connect firmly to the infill.", 
                            "label": "Infill Overlap", 
                            "enabled": "=infill_sparse_density > 0 and infill_pattern != 'concentric'", 
                            "value": "=0.5 * (infill_line_width + (wall_line_width_x if wall_line_count > 1 else wall_line_width_0)) * infill_overlap / 100 if infill_sparse_density < 95 and infill_pattern != 'concentric' else 0"
                        }
                    }, 
                    "description": "The amount of overlap between the infill and the walls as a percentage of the infill line width. A slight overlap allows the walls to connect firmly to the infill.", 
                    "default_value": "10"
                }, 
                "gradual_infill_steps": {
                    "limit_to_extruder": "=infill_extruder_nr", 
                    "minimum_value": "=0", 
                    "settable_per_mesh": "True", 
                    "maximum_value_warning": "=1 if (infill_pattern == 'cross' or infill_pattern == 'cross_3d' or support_pattern == 'concentric' or support_pattern == 'concentric_3d') else 5", 
                    "maximum_value": "=0 if spaghetti_infill_enabled else (999999 if infill_line_distance == 0 else (20 - math.log(infill_line_distance) / math.log(2)))", 
                    "children": {}, 
                    "enabled": "=infill_sparse_density > 0 and infill_pattern != 'cubicsubdiv' and not spaghetti_infill_enabled", 
                    "type": "int", 
                    "label": "Gradual Infill Steps", 
                    "description": "Number of times to reduce the infill density by half when getting further below top surfaces. Areas which are closer to top surfaces get a higher density, up to the Infill Density.", 
                    "default_value": "0"
                }, 
                "skin_overlap": {
                    "settable_per_mesh": "True", 
                    "maximum_value_warning": "=100", 
                    "unit": "%", 
                    "enabled": "=top_bottom_pattern != 'concentric'", 
                    "label": "Skin Overlap Percentage", 
                    "value": "=5 if top_bottom_pattern != 'concentric' else 0", 
                    "limit_to_extruder": "=top_bottom_extruder_nr", 
                    "minimum_value_warning": "=-50", 
                    "type": "float", 
                    "children": {
                        "skin_overlap_mm": {
                            "default_value": "0.02", 
                            "minimum_value_warning": "=-0.5 * machine_nozzle_size", 
                            "settable_per_mesh": "True", 
                            "maximum_value_warning": "=machine_nozzle_size", 
                            "type": "float", 
                            "unit": "mm", 
                            "children": {}, 
                            "description": "The amount of overlap between the skin and the walls. A slight overlap allows the walls to connect firmly to the skin.", 
                            "label": "Skin Overlap", 
                            "enabled": "=top_bottom_pattern != 'concentric'", 
                            "value": "=0.5 * (skin_line_width + (wall_line_width_x if wall_line_count > 1 else wall_line_width_0)) * skin_overlap / 100 if top_bottom_pattern != 'concentric' else 0"
                        }
                    }, 
                    "description": "The amount of overlap between the skin and the walls as a percentage of the skin line width. A slight overlap allows the walls to connect firmly to the skin. This is a percentage of the average line widths of the skin lines and the innermost wall.", 
                    "default_value": "5"
                }, 
                "infill_wipe_dist": {
                    "settable_per_mesh": "True", 
                    "maximum_value_warning": "=machine_nozzle_size", 
                    "unit": "mm", 
                    "enabled": "=infill_sparse_density > 0", 
                    "label": "Infill Wipe Distance", 
                    "value": "=wall_line_width_0 / 4 if wall_line_count == 1 else wall_line_width_x / 4", 
                    "limit_to_extruder": "=infill_extruder_nr", 
                    "minimum_value_warning": "=0", 
                    "type": "float", 
                    "children": {}, 
                    "description": "Distance of a travel move inserted after every infill line, to make the infill stick to the walls better. This option is similar to infill overlap, but without extrusion and only on one end of the infill line.", 
                    "default_value": "0.04"
                }, 
                "infill_sparse_density": {
                    "limit_to_extruder": "=infill_extruder_nr", 
                    "minimum_value": "=0", 
                    "settable_per_mesh": "True", 
                    "maximum_value_warning": "=100", 
                    "type": "float", 
                    "unit": "%", 
                    "children": {
                        "infill_line_distance": {
                            "limit_to_extruder": "=infill_extruder_nr", 
                            "minimum_value": "=0", 
                            "minimum_value_warning": "=infill_line_width", 
                            "settable_per_mesh": "True", 
                            "type": "float", 
                            "unit": "mm", 
                            "children": {}, 
                            "description": "Distance between the printed infill lines. This setting is calculated by the infill density and the infill line width.", 
                            "label": "Infill Line Distance", 
                            "default_value": "2", 
                            "value": "=0 if infill_sparse_density == 0 else (infill_line_width * 100) / infill_sparse_density * (2 if infill_pattern == 'grid' else (3 if infill_pattern == 'triangles' or infill_pattern == 'trihexagon' or infill_pattern == 'cubic' or infill_pattern == 'cubicsubdiv' else (2 if infill_pattern == 'tetrahedral' or infill_pattern == 'quarter_cubic' else (1 if infill_pattern == 'cross' or infill_pattern == 'cross_3d' else 1))))"
                        }
                    }, 
                    "description": "Adjusts the density of infill of the print.", 
                    "label": "Infill Density", 
                    "default_value": "20"
                }, 
                "expand_skins_expand_distance": {
                    "limit_to_extruder": "=top_bottom_extruder_nr", 
                    "minimum_value": "=-skin_preshrink", 
                    "settable_per_mesh": "True", 
                    "type": "float", 
                    "unit": "mm", 
                    "children": {
                        "top_skin_expand_distance": {
                            "limit_to_extruder": "=top_bottom_extruder_nr", 
                            "minimum_value": "=-top_skin_preshrink", 
                            "settable_per_mesh": "True", 
                            "type": "float", 
                            "unit": "mm", 
                            "children": {}, 
                            "description": "The distance the top skins are expanded into the infill. Higher values makes the skin attach better to the infill pattern and makes the walls on the layer above adhere better to the skin. Lower values save amount of material used.", 
                            "label": "Top Skin Expand Distance", 
                            "value": "=expand_skins_expand_distance", 
                            "default_value": "2.8"
                        }, 
                        "bottom_skin_expand_distance": {
                            "limit_to_extruder": "=top_bottom_extruder_nr", 
                            "minimum_value": "=-bottom_skin_preshrink", 
                            "settable_per_mesh": "True", 
                            "type": "float", 
                            "unit": "mm", 
                            "children": {}, 
                            "description": "The distance the bottom skins are expanded into the infill. Higher values makes the skin attach better to the infill pattern and makes the skin adhere better to the walls on the layer below. Lower values save amount of material used.", 
                            "label": "Bottom Skin Expand Distance", 
                            "value": "=expand_skins_expand_distance", 
                            "default_value": "2.8"
                        }
                    }, 
                    "description": "The distance the skins are expanded into the infill. Higher values makes the skin attach better to the infill pattern and makes the walls on neighboring layers adhere better to the skin. Lower values save amount of material used.", 
                    "label": "Skin Expand Distance", 
                    "value": "=wall_line_width_0 + (wall_line_count - 1) * wall_line_width_x", 
                    "default_value": "2.8"
                }, 
                "infill_offset_y": {
                    "limit_to_extruder": "=infill_extruder_nr", 
                    "settable_per_mesh": "True", 
                    "type": "float", 
                    "unit": "mm", 
                    "children": {}, 
                    "enabled": "=infill_pattern == 'grid' or infill_pattern == 'lines' or infill_pattern == 'triangles' or infill_pattern == 'cubic' or infill_pattern == 'tetrahedral' or infill_pattern == 'quarter_cubic' or infill_pattern == 'zigzag'", 
                    "label": "Infill Y Offset", 
                    "description": "The infill pattern is moved this distance along the Y axis.", 
                    "default_value": "0"
                }, 
                "max_skin_angle_for_expansion": {
                    "settable_per_mesh": "True", 
                    "maximum_value": "=90", 
                    "unit": "\u00b0", 
                    "enabled": "=top_skin_expand_distance > 0 or bottom_skin_expand_distance > 0", 
                    "label": "Maximum Skin Angle for Expansion", 
                    "minimum_value_warning": "=2", 
                    "limit_to_extruder": "=top_bottom_extruder_nr", 
                    "minimum_value": "=0", 
                    "type": "float", 
                    "children": {
                        "min_skin_width_for_expansion": {
                            "limit_to_extruder": "=top_bottom_extruder_nr", 
                            "minimum_value": "=0", 
                            "settable_per_mesh": "True", 
                            "type": "float", 
                            "unit": "mm", 
                            "children": {}, 
                            "description": "Skin areas narrower than this are not expanded. This avoids expanding the narrow skin areas that are created when the model surface has a slope close to the vertical.", 
                            "default_value": "2.24", 
                            "label": "Minimum Skin Width for Expansion", 
                            "enabled": "=top_skin_expand_distance > 0 or bottom_skin_expand_distance > 0", 
                            "value": "=top_layers * layer_height / math.tan(math.radians(max_skin_angle_for_expansion))"
                        }
                    }, 
                    "description": "Top and/or bottom surfaces of your object with an angle larger than this setting, won't have their top/bottom skin expanded. This avoids expanding the narrow skin areas that are created when the model surface has a near vertical slope. An angle of 0\u00b0 is horizontal, while an angle of 90\u00b0 is vertical.", 
                    "default_value": "90"
                }, 
                "infill_offset_x": {
                    "limit_to_extruder": "=infill_extruder_nr", 
                    "settable_per_mesh": "True", 
                    "type": "float", 
                    "unit": "mm", 
                    "children": {}, 
                    "enabled": "=infill_pattern == 'grid' or infill_pattern == 'lines' or infill_pattern == 'triangles' or infill_pattern == 'cubic' or infill_pattern == 'tetrahedral' or infill_pattern == 'quarter_cubic' or infill_pattern == 'zigzag'", 
                    "label": "Infill X Offset", 
                    "description": "The infill pattern is moved this distance along the X axis.", 
                    "default_value": "0"
                }, 
                "skin_preshrink": {
                    "limit_to_extruder": "=top_bottom_extruder_nr", 
                    "minimum_value": "=0", 
                    "settable_per_mesh": "True", 
                    "type": "float", 
                    "unit": "mm", 
                    "children": {
                        "bottom_skin_preshrink": {
                            "limit_to_extruder": "=top_bottom_extruder_nr", 
                            "minimum_value": "=0", 
                            "settable_per_mesh": "True", 
                            "type": "float", 
                            "unit": "mm", 
                            "children": {}, 
                            "description": "The largest width of bottom skin areas which are to be removed. Every skin area smaller than this value will disappear. This can help in limiting the amount of time and material spent on printing bottom skin at slanted surfaces in the model.", 
                            "label": "Bottom Skin Removal Width", 
                            "value": "=skin_preshrink", 
                            "default_value": "0"
                        }, 
                        "top_skin_preshrink": {
                            "limit_to_extruder": "=top_bottom_extruder_nr", 
                            "minimum_value": "=0", 
                            "settable_per_mesh": "True", 
                            "type": "float", 
                            "unit": "mm", 
                            "children": {}, 
                            "description": "The largest width of top skin areas which are to be removed. Every skin area smaller than this value will disappear. This can help in limiting the amount of time and material spent on printing top skin at slanted surfaces in the model.", 
                            "label": "Top Skin Removal Width", 
                            "value": "=skin_preshrink", 
                            "default_value": "0"
                        }
                    }, 
                    "description": "The largest width of skin areas which are to be removed. Every skin area smaller than this value will disappear. This can help in limiting the amount of time and material spent on printing top/bottom skin at slanted surfaces in the model.", 
                    "label": "Skin Removal Width", 
                    "value": "=wall_line_width_0 + (wall_line_count - 1) * wall_line_width_x", 
                    "default_value": "0"
                }, 
                "gradual_infill_step_height": {
                    "limit_to_extruder": "=infill_extruder_nr", 
                    "minimum_value": "=0.0001", 
                    "settable_per_mesh": "True", 
                    "type": "float", 
                    "unit": "mm", 
                    "children": {}, 
                    "description": "The height of infill of a given density before switching to half the density.", 
                    "default_value": "1.5", 
                    "label": "Gradual Infill Step Height", 
                    "enabled": "=infill_sparse_density > 0 and gradual_infill_steps > 0 and infill_pattern != 'cubicsubdiv'", 
                    "minimum_value_warning": "=3 * resolveOrValue('layer_height')"
                }, 
                "infill_before_walls": {
                    "settable_per_mesh": "True", 
                    "type": "bool", 
                    "children": {}, 
                    "description": "Print the infill before printing the walls. Printing the walls first may lead to more accurate walls, but overhangs print worse. Printing the infill first leads to sturdier walls, but the infill pattern might sometimes show through the surface.", 
                    "label": "Infill Before Walls", 
                    "enabled": "=infill_sparse_density > 0 and wall_x_extruder_nr == infill_extruder_nr", 
                    "default_value": "False"
                }, 
                "infill_sparse_thickness": {
                    "settable_per_mesh": "True", 
                    "maximum_value_warning": "=0.75 * machine_nozzle_size", 
                    "maximum_value": "=resolveOrValue('layer_height') * (1.45 if spaghetti_infill_enabled else 8)", 
                    "unit": "mm", 
                    "enabled": "=infill_sparse_density > 0 and not spaghetti_infill_enabled", 
                    "label": "Infill Layer Thickness", 
                    "value": "=resolveOrValue('layer_height')", 
                    "limit_to_extruder": "=infill_extruder_nr", 
                    "minimum_value": "=resolveOrValue('layer_height')", 
                    "type": "float", 
                    "children": {}, 
                    "description": "The thickness per layer of infill material. This value should always be a multiple of the layer height and is otherwise rounded.", 
                    "default_value": "0.1"
                }
            }, 
            "description": "Infill", 
            "label": "Infill", 
            "type": "category"
        }, 
        "blackmagic": {
            "icon": "category_blackmagic", 
            "children": {
                "mold_enabled": {
                    "settable_per_mesh": "True", 
                    "type": "bool", 
                    "children": {}, 
                    "description": "Print models as a mold, which can be cast in order to get a model which resembles the models on the build plate.", 
                    "label": "Mold", 
                    "default_value": "False"
                }, 
                "mold_angle": {
                    "settable_per_mesh": "True", 
                    "maximum_value_warning": "=support_angle", 
                    "maximum_value": "=90", 
                    "unit": "\u00b0", 
                    "enabled": "=mold_enabled", 
                    "label": "Mold Angle", 
                    "minimum_value": "=-89", 
                    "minimum_value_warning": "=0", 
                    "type": "float", 
                    "children": {}, 
                    "description": "The angle of overhang of the outer walls created for the mold. 0\u00b0 will make the outer shell of the mold vertical, while 90\u00b0 will make the outside of the model follow the contour of the model.", 
                    "default_value": "40"
                }, 
                "cutting_mesh": {
                    "settable_per_mesh": "True", 
                    "settable_globally": "False", 
                    "type": "bool", 
                    "children": {}, 
                    "description": "Limit the volume of this mesh to within other meshes. You can use this to make certain areas of one mesh print with different settings and with a whole different extruder.", 
                    "settable_per_meshgroup": "False", 
                    "label": "Cutting Mesh", 
                    "default_value": "False", 
                    "settable_per_extruder": "False"
                }, 
                "magic_mesh_surface_mode": {
                    "settable_per_mesh": "True", 
                    "type": "enum", 
                    "options": "OrderedDict([('normal', 'Normal'), ('surface', 'Surface'), ('both', 'Both')])", 
                    "children": {}, 
                    "description": "Treat the model as a surface only, a volume, or volumes with loose surfaces. The normal print mode only prints enclosed volumes. \"Surface\" prints a single wall tracing the mesh surface with no infill and no top/bottom skin. \"Both\" prints enclosed volumes like normal and any remaining polygons as surfaces.", 
                    "label": "Surface Mode", 
                    "default_value": "normal"
                }, 
                "support_mesh": {
                    "settable_per_mesh": "True", 
                    "settable_globally": "False", 
                    "type": "bool", 
                    "children": {}, 
                    "description": "Use this mesh to specify support areas. This can be used to generate support structure.", 
                    "settable_per_meshgroup": "False", 
                    "label": "Support Mesh", 
                    "default_value": "False", 
                    "settable_per_extruder": "False"
                }, 
                "relative_extrusion": {
                    "default_value": "False", 
                    "settable_per_mesh": "False", 
                    "type": "bool", 
                    "children": {}, 
                    "description": "Use relative extrusion rather than absolute extrusion. Using relative E-steps makes for easier post-processing of the Gcode. However, it's not supported by all printers and it may produce very slight deviations in the amount of deposited material compared to absolute E-steps. Irrespective of this setting, the extrusion mode will always be set to absolute before any Gcode script is output.", 
                    "label": "Relative Extrusion", 
                    "enabled": "=True", 
                    "settable_per_extruder": "False", 
                    "value": "=machine_gcode_flavor==\"RepRap (RepRap)\""
                }, 
                "mold_width": {
                    "minimum_value_warning": "=wall_line_width_0 * 2", 
                    "settable_per_mesh": "True", 
                    "maximum_value_warning": "=100", 
                    "type": "float", 
                    "unit": "mm", 
                    "children": {}, 
                    "enabled": "=mold_enabled", 
                    "label": "Minimal Mold Width", 
                    "description": "The minimal distance between the ouside of the mold and the outside of the model.", 
                    "default_value": "5"
                }, 
                "infill_mesh_order": {
                    "settable_per_mesh": "True", 
                    "maximum_value_warning": "=50", 
                    "settable_per_extruder": "False", 
                    "label": "Infill Mesh Order", 
                    "value": "=1 if infill_mesh else 0", 
                    "minimum_value_warning": "=1", 
                    "settable_globally": "False", 
                    "type": "int", 
                    "children": {}, 
                    "description": "Determines which infill mesh is inside the infill of another infill mesh. An infill mesh with a higher order will modify the infill of infill meshes with lower order and normal meshes.", 
                    "settable_per_meshgroup": "False", 
                    "default_value": "0"
                }, 
                "smooth_spiralized_contours": {
                    "settable_per_mesh": "False", 
                    "type": "bool", 
                    "children": {}, 
                    "enabled": "=magic_spiralize", 
                    "label": "Smooth Spiralized Contours", 
                    "description": "Smooth the spiralized contours to reduce the visibility of the Z seam (the Z-seam should be barely visible on the print but will still be visible in the layer view). Note that smoothing will tend to blur fine surface details.", 
                    "settable_per_extruder": "False", 
                    "default_value": "True"
                }, 
                "print_sequence": {
                    "settable_per_mesh": "False", 
                    "type": "enum", 
                    "options": "OrderedDict([('all_at_once', 'All at Once'), ('one_at_a_time', 'One at a Time')])", 
                    "children": {}, 
                    "enabled": "=machine_extruder_count == 1", 
                    "settable_per_meshgroup": "False", 
                    "label": "Print Sequence", 
                    "description": "Whether to print all models one layer at a time or to wait for one model to finish, before moving on to the next. One at a time mode is only possible if all models are separated in such a way that the whole print head can move in between and all models are lower than the distance between the nozzle and the X/Y axes.", 
                    "settable_per_extruder": "False", 
                    "default_value": "all_at_once"
                }, 
                "infill_mesh": {
                    "settable_per_mesh": "True", 
                    "settable_globally": "False", 
                    "type": "bool", 
                    "children": {}, 
                    "description": "Use this mesh to modify the infill of other meshes with which it overlaps. Replaces infill regions of other meshes with regions for this mesh. It's suggested to only print one Wall and no Top/Bottom Skin for this mesh.", 
                    "settable_per_meshgroup": "False", 
                    "label": "Infill Mesh", 
                    "default_value": "False", 
                    "settable_per_extruder": "False"
                }, 
                "magic_spiralize": {
                    "settable_per_mesh": "False", 
                    "type": "bool", 
                    "children": {}, 
                    "description": "Spiralize smooths out the Z move of the outer edge. This will create a steady Z increase over the whole print. This feature turns a solid model into a single walled print with a solid bottom. This feature should only be enabled when each layer only contains a single part.", 
                    "label": "Spiralize Outer Contour", 
                    "default_value": "False", 
                    "settable_per_extruder": "False"
                }, 
                "mold_roof_height": {
                    "minimum_value": "=0", 
                    "settable_per_mesh": "True", 
                    "maximum_value_warning": "=5", 
                    "type": "float", 
                    "unit": "mm", 
                    "children": {}, 
                    "enabled": "=mold_enabled", 
                    "label": "Mold Roof Height", 
                    "description": "The height above horizontal parts in your model which to print mold.", 
                    "default_value": "0.5"
                }, 
                "anti_overhang_mesh": {
                    "settable_per_mesh": "True", 
                    "settable_globally": "False", 
                    "type": "bool", 
                    "children": {}, 
                    "description": "Use this mesh to specify where no part of the model should be detected as overhang. This can be used to remove unwanted support structure.", 
                    "settable_per_meshgroup": "False", 
                    "label": "Anti Overhang Mesh", 
                    "default_value": "False", 
                    "settable_per_extruder": "False"
                }
            }, 
            "description": "category_blackmagic", 
            "label": "Special Modes", 
            "type": "category"
        }, 
        "platform_adhesion": {
            "icon": "category_adhesion", 
            "children": {
                "raft_surface_layers": {
                    "limit_to_extruder": "=adhesion_extruder_nr", 
                    "minimum_value": "=0", 
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=20", 
                    "type": "int", 
                    "children": {}, 
                    "enabled": "=resolveOrValue('adhesion_type') == 'raft'", 
                    "label": "Raft Top Layers", 
                    "description": "The number of top layers on top of the 2nd raft layer. These are fully filled layers that the model sits on. 2 layers result in a smoother top surface than 1.", 
                    "settable_per_extruder": "True", 
                    "default_value": "2"
                }, 
                "raft_interface_line_width": {
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=machine_nozzle_size * 3", 
                    "unit": "mm", 
                    "settable_per_extruder": "True", 
                    "enabled": "=resolveOrValue('adhesion_type') == 'raft'", 
                    "label": "Raft Middle Line Width", 
                    "minimum_value": "=0.001", 
                    "value": "=line_width * 2", 
                    "limit_to_extruder": "=adhesion_extruder_nr", 
                    "minimum_value_warning": "=machine_nozzle_size * 0.5", 
                    "type": "float", 
                    "children": {}, 
                    "description": "Width of the lines in the middle raft layer. Making the second layer extrude more causes the lines to stick to the build plate.", 
                    "default_value": "0.7"
                }, 
                "raft_smoothing": {
                    "settable_per_mesh": "False", 
                    "unit": "mm", 
                    "settable_per_extruder": "True", 
                    "enabled": "=resolveOrValue('adhesion_type') == 'raft'", 
                    "label": "Raft Smoothing", 
                    "minimum_value_warning": "=raft_interface_line_width", 
                    "limit_to_extruder": "=adhesion_extruder_nr", 
                    "minimum_value": "=0", 
                    "type": "float", 
                    "children": {}, 
                    "description": "This setting controls how much inner corners in the raft outline are rounded. Inward corners are rounded to a semi circle with a radius equal to the value given here. This setting also removes holes in the raft outline which are smaller than such a circle.", 
                    "default_value": "5"
                }, 
                "raft_interface_thickness": {
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=0.75 * machine_nozzle_size", 
                    "unit": "mm", 
                    "settable_per_extruder": "True", 
                    "enabled": "=resolveOrValue('adhesion_type') == 'raft'", 
                    "label": "Raft Middle Thickness", 
                    "minimum_value": "=0.001", 
                    "value": "=resolveOrValue('layer_height') * 1.5", 
                    "limit_to_extruder": "=adhesion_extruder_nr", 
                    "minimum_value_warning": "=0.04", 
                    "type": "float", 
                    "children": {}, 
                    "description": "Layer thickness of the middle raft layer.", 
                    "default_value": "0.15"
                }, 
                "raft_fan_speed": {
                    "settable_per_mesh": "False", 
                    "maximum_value": "=100", 
                    "unit": "%", 
                    "settable_per_extruder": "True", 
                    "enabled": "=resolveOrValue('adhesion_type') == 'raft'", 
                    "label": "Raft Fan Speed", 
                    "limit_to_extruder": "=adhesion_extruder_nr", 
                    "minimum_value": "=0", 
                    "type": "float", 
                    "children": {
                        "raft_surface_fan_speed": {
                            "settable_per_mesh": "False", 
                            "maximum_value": "=100", 
                            "unit": "%", 
                            "settable_per_extruder": "True", 
                            "enabled": "=resolveOrValue('adhesion_type') == 'raft'", 
                            "label": "Raft Top Fan Speed", 
                            "value": "=raft_fan_speed", 
                            "limit_to_extruder": "=adhesion_extruder_nr", 
                            "minimum_value": "=0", 
                            "type": "float", 
                            "children": {}, 
                            "description": "The fan speed for the top raft layers.", 
                            "default_value": "0"
                        }, 
                        "raft_base_fan_speed": {
                            "settable_per_mesh": "False", 
                            "maximum_value": "=100", 
                            "unit": "%", 
                            "settable_per_extruder": "True", 
                            "enabled": "=resolveOrValue('adhesion_type') == 'raft'", 
                            "label": "Raft Base Fan Speed", 
                            "value": "=raft_fan_speed", 
                            "limit_to_extruder": "=adhesion_extruder_nr", 
                            "minimum_value": "=0", 
                            "type": "float", 
                            "children": {}, 
                            "description": "The fan speed for the base raft layer.", 
                            "default_value": "0"
                        }, 
                        "raft_interface_fan_speed": {
                            "settable_per_mesh": "False", 
                            "maximum_value": "=100", 
                            "unit": "%", 
                            "settable_per_extruder": "True", 
                            "enabled": "=resolveOrValue('adhesion_type') == 'raft'", 
                            "label": "Raft Middle Fan Speed", 
                            "value": "=raft_fan_speed", 
                            "limit_to_extruder": "=adhesion_extruder_nr", 
                            "minimum_value": "=0", 
                            "type": "float", 
                            "children": {}, 
                            "description": "The fan speed for the middle raft layer.", 
                            "default_value": "0"
                        }
                    }, 
                    "description": "The fan speed for the raft.", 
                    "default_value": "0"
                }, 
                "raft_base_line_width": {
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=machine_nozzle_size * 3", 
                    "unit": "mm", 
                    "settable_per_extruder": "True", 
                    "enabled": "=resolveOrValue('adhesion_type') == 'raft'", 
                    "label": "Raft Base Line Width", 
                    "minimum_value": "=0.001", 
                    "value": "=machine_nozzle_size * 2", 
                    "limit_to_extruder": "=adhesion_extruder_nr", 
                    "minimum_value_warning": "=machine_nozzle_size * 0.5", 
                    "type": "float", 
                    "children": {}, 
                    "description": "Width of the lines in the base raft layer. These should be thick lines to assist in build plate adhesion.", 
                    "default_value": "0.8"
                }, 
                "raft_interface_line_spacing": {
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=15.0", 
                    "unit": "mm", 
                    "settable_per_extruder": "True", 
                    "enabled": "=resolveOrValue('adhesion_type') == 'raft'", 
                    "label": "Raft Middle Spacing", 
                    "minimum_value": "=0", 
                    "value": "=raft_interface_line_width + 0.2", 
                    "limit_to_extruder": "=adhesion_extruder_nr", 
                    "minimum_value_warning": "=raft_interface_line_width", 
                    "type": "float", 
                    "children": {}, 
                    "description": "The distance between the raft lines for the middle raft layer. The spacing of the middle should be quite wide, while being dense enough to support the top raft layers.", 
                    "default_value": "0.9"
                }, 
                "raft_surface_thickness": {
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=0.75 * machine_nozzle_size", 
                    "unit": "mm", 
                    "settable_per_extruder": "True", 
                    "enabled": "=resolveOrValue('adhesion_type') == 'raft'", 
                    "label": "Raft Top Layer Thickness", 
                    "minimum_value": "=0.001", 
                    "value": "=resolveOrValue('layer_height')", 
                    "limit_to_extruder": "=adhesion_extruder_nr", 
                    "minimum_value_warning": "=0.04", 
                    "type": "float", 
                    "children": {}, 
                    "description": "Layer thickness of the top raft layers.", 
                    "default_value": "0.1"
                }, 
                "raft_base_line_spacing": {
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=100", 
                    "unit": "mm", 
                    "settable_per_extruder": "True", 
                    "enabled": "=resolveOrValue('adhesion_type') == 'raft'", 
                    "label": "Raft Line Spacing", 
                    "minimum_value": "=0", 
                    "value": "=raft_base_line_width * 2", 
                    "limit_to_extruder": "=adhesion_extruder_nr", 
                    "minimum_value_warning": "=raft_base_line_width", 
                    "type": "float", 
                    "children": {}, 
                    "description": "The distance between the raft lines for the base raft layer. Wide spacing makes for easy removal of the raft from the build plate.", 
                    "default_value": "1.6"
                }, 
                "raft_speed": {
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=200", 
                    "maximum_value": "=math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)", 
                    "unit": "mm/s", 
                    "settable_per_extruder": "True", 
                    "enabled": "=resolveOrValue('adhesion_type') == 'raft'", 
                    "label": "Raft Print Speed", 
                    "value": "=speed_print / 60 * 30", 
                    "limit_to_extruder": "=adhesion_extruder_nr", 
                    "minimum_value": "=0.1", 
                    "type": "float", 
                    "children": {
                        "raft_surface_speed": {
                            "settable_per_mesh": "False", 
                            "maximum_value_warning": "=100", 
                            "maximum_value": "=math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)", 
                            "unit": "mm/s", 
                            "settable_per_extruder": "True", 
                            "enabled": "=resolveOrValue('adhesion_type') == 'raft'", 
                            "label": "Raft Top Print Speed", 
                            "value": "=raft_speed", 
                            "limit_to_extruder": "=adhesion_extruder_nr", 
                            "minimum_value": "=0.1", 
                            "type": "float", 
                            "children": {}, 
                            "description": "The speed at which the top raft layers are printed. These should be printed a bit slower, so that the nozzle can slowly smooth out adjacent surface lines.", 
                            "default_value": "20"
                        }, 
                        "raft_base_speed": {
                            "settable_per_mesh": "False", 
                            "maximum_value_warning": "=200", 
                            "maximum_value": "=math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)", 
                            "unit": "mm/s", 
                            "settable_per_extruder": "True", 
                            "enabled": "=resolveOrValue('adhesion_type') == 'raft'", 
                            "label": "Raft Base Print Speed", 
                            "value": "=0.75 * raft_speed", 
                            "limit_to_extruder": "=adhesion_extruder_nr", 
                            "minimum_value": "=0.1", 
                            "type": "float", 
                            "children": {}, 
                            "description": "The speed at which the base raft layer is printed. This should be printed quite slowly, as the volume of material coming out of the nozzle is quite high.", 
                            "default_value": "15"
                        }, 
                        "raft_interface_speed": {
                            "settable_per_mesh": "False", 
                            "maximum_value_warning": "=150", 
                            "maximum_value": "=math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)", 
                            "unit": "mm/s", 
                            "settable_per_extruder": "True", 
                            "enabled": "=resolveOrValue('adhesion_type') == 'raft'", 
                            "label": "Raft Middle Print Speed", 
                            "value": "=raft_speed * 0.75", 
                            "limit_to_extruder": "=adhesion_extruder_nr", 
                            "minimum_value": "=0.1", 
                            "type": "float", 
                            "children": {}, 
                            "description": "The speed at which the middle raft layer is printed. This should be printed quite slowly, as the volume of material coming out of the nozzle is quite high.", 
                            "default_value": "15"
                        }
                    }, 
                    "description": "The speed at which the raft is printed.", 
                    "default_value": "20"
                }, 
                "raft_margin": {
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=20", 
                    "unit": "mm", 
                    "settable_per_extruder": "True", 
                    "enabled": "=resolveOrValue('adhesion_type') == 'raft'", 
                    "label": "Raft Extra Margin", 
                    "limit_to_extruder": "=adhesion_extruder_nr", 
                    "minimum_value_warning": "=raft_interface_line_width", 
                    "type": "float", 
                    "children": {}, 
                    "description": "If the raft is enabled, this is the extra raft area around the model which is also given a raft. Increasing this margin will create a stronger raft while using more material and leaving less area for your print.", 
                    "default_value": "15"
                }, 
                "brim_outside_only": {
                    "limit_to_extruder": "=adhesion_extruder_nr", 
                    "settable_per_mesh": "False", 
                    "type": "bool", 
                    "children": {}, 
                    "enabled": "=resolveOrValue('adhesion_type') == 'brim'", 
                    "label": "Brim Only on Outside", 
                    "description": "Only print the brim on the outside of the model. This reduces the amount of brim you need to remove afterwards, while it doesn't reduce the bed adhesion that much.", 
                    "settable_per_extruder": "True", 
                    "default_value": "True"
                }, 
                "raft_base_thickness": {
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=0.75 * raft_base_line_width", 
                    "unit": "mm", 
                    "settable_per_extruder": "True", 
                    "enabled": "=resolveOrValue('adhesion_type') == 'raft'", 
                    "label": "Raft Base Thickness", 
                    "minimum_value": "=0.001", 
                    "value": "=resolveOrValue('layer_height_0') * 1.2", 
                    "limit_to_extruder": "=adhesion_extruder_nr", 
                    "minimum_value_warning": "=0.04", 
                    "type": "float", 
                    "children": {}, 
                    "description": "Layer thickness of the base raft layer. This should be a thick layer which sticks firmly to the printer build plate.", 
                    "default_value": "0.3"
                }, 
                "raft_jerk": {
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=50", 
                    "unit": "mm/s", 
                    "enabled": "=resolveOrValue('adhesion_type') == 'raft' and resolveOrValue('jerk_enabled')", 
                    "label": "Raft Print Jerk", 
                    "minimum_value": "=0", 
                    "value": "=jerk_print", 
                    "limit_to_extruder": "=adhesion_extruder_nr", 
                    "minimum_value_warning": "=5", 
                    "type": "float", 
                    "children": {
                        "raft_interface_jerk": {
                            "settable_per_mesh": "False", 
                            "maximum_value_warning": "=50", 
                            "unit": "mm/s", 
                            "enabled": "=resolveOrValue('adhesion_type') == 'raft' and resolveOrValue('jerk_enabled')", 
                            "label": "Raft Middle Print Jerk", 
                            "minimum_value": "=0", 
                            "value": "=raft_jerk", 
                            "limit_to_extruder": "=adhesion_extruder_nr", 
                            "minimum_value_warning": "=5", 
                            "type": "float", 
                            "children": {}, 
                            "description": "The jerk with which the middle raft layer is printed.", 
                            "default_value": "20"
                        }, 
                        "raft_base_jerk": {
                            "settable_per_mesh": "False", 
                            "maximum_value_warning": "=50", 
                            "unit": "mm/s", 
                            "enabled": "=resolveOrValue('adhesion_type') == 'raft' and resolveOrValue('jerk_enabled')", 
                            "label": "Raft Base Print Jerk", 
                            "minimum_value": "=0", 
                            "value": "=raft_jerk", 
                            "limit_to_extruder": "=adhesion_extruder_nr", 
                            "minimum_value_warning": "=5", 
                            "type": "float", 
                            "children": {}, 
                            "description": "The jerk with which the base raft layer is printed.", 
                            "default_value": "20"
                        }, 
                        "raft_surface_jerk": {
                            "settable_per_mesh": "False", 
                            "maximum_value_warning": "=100", 
                            "unit": "mm/s", 
                            "enabled": "=resolveOrValue('adhesion_type') == 'raft' and resolveOrValue('jerk_enabled')", 
                            "label": "Raft Top Print Jerk", 
                            "minimum_value": "=0", 
                            "value": "=raft_jerk", 
                            "limit_to_extruder": "=adhesion_extruder_nr", 
                            "minimum_value_warning": "=5", 
                            "type": "float", 
                            "children": {}, 
                            "description": "The jerk with which the top raft layers are printed.", 
                            "default_value": "20"
                        }
                    }, 
                    "description": "The jerk with which the raft is printed.", 
                    "default_value": "20"
                }, 
                "extruder_prime_pos_x": {
                    "minimum_value_warning": "=machine_width / -2 if machine_center_is_zero else 0", 
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=machine_width / 2 if machine_center_is_zero else machine_width", 
                    "type": "float", 
                    "unit": "mm", 
                    "children": {}, 
                    "enabled": "=False", 
                    "label": "Extruder Prime X Position", 
                    "description": "The X coordinate of the position where the nozzle primes at the start of printing.", 
                    "settable_per_extruder": "True", 
                    "default_value": "0"
                }, 
                "layer_0_z_overlap": {
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=raft_airgap", 
                    "unit": "mm", 
                    "settable_per_extruder": "True", 
                    "enabled": "=resolveOrValue('adhesion_type') == 'raft'", 
                    "label": "Initial Layer Z Overlap", 
                    "value": "=raft_airgap / 2", 
                    "limit_to_extruder": "=adhesion_extruder_nr", 
                    "minimum_value": "=0", 
                    "type": "float", 
                    "children": {}, 
                    "description": "Make the first and second layer of the model overlap in the Z direction to compensate for the filament lost in the airgap. All models above the first model layer will be shifted down by this amount.", 
                    "default_value": "0.22"
                }, 
                "skirt_line_count": {
                    "limit_to_extruder": "=adhesion_extruder_nr", 
                    "minimum_value": "=0", 
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=10", 
                    "type": "int", 
                    "children": {}, 
                    "enabled": "=resolveOrValue('adhesion_type') == 'skirt'", 
                    "label": "Skirt Line Count", 
                    "description": "Multiple skirt lines help to prime your extrusion better for small models. Setting this to 0 will disable the skirt.", 
                    "settable_per_extruder": "True", 
                    "default_value": "1"
                }, 
                "adhesion_extruder_nr": {
                    "settable_per_mesh": "False", 
                    "type": "extruder", 
                    "children": {}, 
                    "enabled": "=machine_extruder_count > 1 and resolveOrValue('adhesion_type') != 'none'", 
                    "label": "Build Plate Adhesion Extruder", 
                    "description": "The extruder train to use for printing the skirt/brim/raft. This is used in multi-extrusion.", 
                    "settable_per_extruder": "False", 
                    "default_value": "0"
                }, 
                "prime_blob_enable": {
                    "resolve": "=any(extruderValues('prime_blob_enable'))", 
                    "settable_per_mesh": "False", 
                    "type": "bool", 
                    "children": {}, 
                    "enabled": "=False", 
                    "label": "Enable Prime Blob", 
                    "description": "Whether to prime the filament with a blob before printing. Turning this setting on will ensure that the extruder will have material ready at the nozzle before printing. Printing Brim or Skirt can act like priming too, in which case turning this setting off saves some time.", 
                    "settable_per_extruder": "True", 
                    "default_value": "True"
                }, 
                "skirt_brim_minimal_length": {
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=2500", 
                    "unit": "mm", 
                    "settable_per_extruder": "True", 
                    "enabled": "=resolveOrValue('adhesion_type') == 'skirt' or resolveOrValue('adhesion_type') == 'brim'", 
                    "label": "Skirt/Brim Minimum Length", 
                    "minimum_value": "=0", 
                    "minimum_value_warning": "=25", 
                    "type": "float", 
                    "children": {}, 
                    "description": "The minimum length of the skirt or brim. If this length is not reached by all skirt or brim lines together, more skirt or brim lines will be added until the minimum length is reached. Note: If the line count is set to 0 this is ignored.", 
                    "default_value": "250"
                }, 
                "raft_surface_line_width": {
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=machine_nozzle_size * 2", 
                    "unit": "mm", 
                    "settable_per_extruder": "True", 
                    "enabled": "=resolveOrValue('adhesion_type') == 'raft'", 
                    "label": "Raft Top Line Width", 
                    "minimum_value": "=0.001", 
                    "value": "=line_width", 
                    "limit_to_extruder": "=adhesion_extruder_nr", 
                    "minimum_value_warning": "=machine_nozzle_size * 0.1", 
                    "type": "float", 
                    "children": {}, 
                    "description": "Width of the lines in the top surface of the raft. These can be thin lines so that the top of the raft becomes smooth.", 
                    "default_value": "0.4"
                }, 
                "raft_airgap": {
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=min(extruderValues('machine_nozzle_size'))", 
                    "unit": "mm", 
                    "settable_per_extruder": "True", 
                    "enabled": "=resolveOrValue('adhesion_type') == 'raft'", 
                    "label": "Raft Air Gap", 
                    "limit_to_extruder": "=adhesion_extruder_nr", 
                    "minimum_value": "=0", 
                    "type": "float", 
                    "children": {}, 
                    "description": "The gap between the final raft layer and the first layer of the model. Only the first layer is raised by this amount to lower the bonding between the raft layer and the model. Makes it easier to peel off the raft.", 
                    "default_value": "0.3"
                }, 
                "skirt_gap": {
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=10", 
                    "unit": "mm", 
                    "settable_per_extruder": "True", 
                    "enabled": "=resolveOrValue('adhesion_type') == 'skirt'", 
                    "label": "Skirt Distance", 
                    "limit_to_extruder": "=adhesion_extruder_nr", 
                    "minimum_value_warning": "=max(extruderValues('machine_nozzle_size'))", 
                    "type": "float", 
                    "children": {}, 
                    "description": "The horizontal distance between the skirt and the first layer of the print.\nThis is the minimum distance. Multiple skirt lines will extend outwards from this distance.", 
                    "default_value": "3"
                }, 
                "raft_acceleration": {
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=10000", 
                    "unit": "mm/s\u00b2", 
                    "enabled": "=resolveOrValue('adhesion_type') == 'raft' and resolveOrValue('acceleration_enabled')", 
                    "label": "Raft Print Acceleration", 
                    "minimum_value": "=0.1", 
                    "value": "=acceleration_print", 
                    "limit_to_extruder": "=adhesion_extruder_nr", 
                    "minimum_value_warning": "=100", 
                    "type": "float", 
                    "children": {
                        "raft_interface_acceleration": {
                            "settable_per_mesh": "False", 
                            "maximum_value_warning": "=10000", 
                            "unit": "mm/s\u00b2", 
                            "enabled": "=resolveOrValue('adhesion_type') == 'raft' and resolveOrValue('acceleration_enabled')", 
                            "label": "Raft Middle Print Acceleration", 
                            "minimum_value": "=0.1", 
                            "value": "=raft_acceleration", 
                            "limit_to_extruder": "=adhesion_extruder_nr", 
                            "minimum_value_warning": "=100", 
                            "type": "float", 
                            "children": {}, 
                            "description": "The acceleration with which the middle raft layer is printed.", 
                            "default_value": "3000"
                        }, 
                        "raft_surface_acceleration": {
                            "settable_per_mesh": "False", 
                            "maximum_value_warning": "=10000", 
                            "unit": "mm/s\u00b2", 
                            "enabled": "=resolveOrValue('adhesion_type') == 'raft' and resolveOrValue('acceleration_enabled')", 
                            "label": "Raft Top Print Acceleration", 
                            "minimum_value": "=0.1", 
                            "value": "=raft_acceleration", 
                            "limit_to_extruder": "=adhesion_extruder_nr", 
                            "minimum_value_warning": "=100", 
                            "type": "float", 
                            "children": {}, 
                            "description": "The acceleration with which the top raft layers are printed.", 
                            "default_value": "3000"
                        }, 
                        "raft_base_acceleration": {
                            "settable_per_mesh": "False", 
                            "maximum_value_warning": "=10000", 
                            "unit": "mm/s\u00b2", 
                            "enabled": "=resolveOrValue('adhesion_type') == 'raft' and resolveOrValue('acceleration_enabled')", 
                            "label": "Raft Base Print Acceleration", 
                            "minimum_value": "=0.1", 
                            "value": "=raft_acceleration", 
                            "limit_to_extruder": "=adhesion_extruder_nr", 
                            "minimum_value_warning": "=100", 
                            "type": "float", 
                            "children": {}, 
                            "description": "The acceleration with which the base raft layer is printed.", 
                            "default_value": "3000"
                        }
                    }, 
                    "description": "The acceleration with which the raft is printed.", 
                    "default_value": "3000"
                }, 
                "extruder_prime_pos_y": {
                    "minimum_value_warning": "=machine_depth / -2 if machine_center_is_zero else 0", 
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=machine_depth / 2 if machine_center_is_zero else machine_depth", 
                    "type": "float", 
                    "unit": "mm", 
                    "children": {}, 
                    "enabled": "=False", 
                    "label": "Extruder Prime Y Position", 
                    "description": "The Y coordinate of the position where the nozzle primes at the start of printing.", 
                    "settable_per_extruder": "True", 
                    "default_value": "0"
                }, 
                "brim_width": {
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=50.0", 
                    "unit": "mm", 
                    "settable_per_extruder": "True", 
                    "enabled": "=resolveOrValue('adhesion_type') == 'brim'", 
                    "label": "Brim Width", 
                    "limit_to_extruder": "=adhesion_extruder_nr", 
                    "minimum_value": "=0.0", 
                    "type": "float", 
                    "children": {
                        "brim_line_count": {
                            "settable_per_mesh": "False", 
                            "maximum_value_warning": "=50 / skirt_brim_line_width", 
                            "settable_per_extruder": "True", 
                            "enabled": "=resolveOrValue('adhesion_type') == 'brim'", 
                            "label": "Brim Line Count", 
                            "value": "=math.ceil(brim_width / (skirt_brim_line_width * initial_layer_line_width_factor / 100.0))", 
                            "limit_to_extruder": "=adhesion_extruder_nr", 
                            "minimum_value": "=0", 
                            "type": "int", 
                            "children": {}, 
                            "description": "The number of lines used for a brim. More brim lines enhance adhesion to the build plate, but also reduces the effective print area.", 
                            "default_value": "20"
                        }
                    }, 
                    "description": "The distance from the model to the outermost brim line. A larger brim enhances adhesion to the build plate, but also reduces the effective print area.", 
                    "default_value": "8.0"
                }, 
                "raft_surface_line_spacing": {
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=raft_surface_line_width * 3", 
                    "unit": "mm", 
                    "settable_per_extruder": "True", 
                    "enabled": "=resolveOrValue('adhesion_type') == 'raft'", 
                    "label": "Raft Top Spacing", 
                    "minimum_value": "=0", 
                    "value": "=raft_surface_line_width", 
                    "limit_to_extruder": "=adhesion_extruder_nr", 
                    "minimum_value_warning": "=raft_surface_line_width", 
                    "type": "float", 
                    "children": {}, 
                    "description": "The distance between the raft lines for the top raft layers. The spacing should be equal to the line width, so that the surface is solid.", 
                    "default_value": "0.4"
                }, 
                "adhesion_type": {
                    "resolve": "=extruderValue(adhesion_extruder_nr, 'adhesion_type')", 
                    "settable_per_mesh": "False", 
                    "type": "enum", 
                    "options": "OrderedDict([('skirt', 'Skirt'), ('brim', 'Brim'), ('raft', 'Raft'), ('none', 'None')])", 
                    "children": {}, 
                    "description": "Different options that help to improve both priming your extrusion and adhesion to the build plate. Brim adds a single layer flat area around the base of your model to prevent warping. Raft adds a thick grid with a roof below the model. Skirt is a line printed around the model, but not connected to the model.", 
                    "label": "Build Plate Adhesion Type", 
                    "default_value": "skirt", 
                    "settable_per_extruder": "False"
                }
            }, 
            "description": "Adhesion", 
            "label": "Build Plate Adhesion", 
            "type": "category"
        }, 
        "experimental": {
            "icon": "category_experimental", 
            "children": {
                "roofing_angles": {
                    "limit_to_extruder": "=roofing_extruder_nr", 
                    "settable_per_mesh": "True", 
                    "type": "[int]", 
                    "default_value": "[ ]", 
                    "children": {}, 
                    "description": "A list of integer line directions to use when the top surface skin layers use the lines or zig zag pattern. Elements from the list are used sequentially as the layers progress and when the end of the list is reached, it starts at the beginning again. The list items are separated by commas and the whole list is contained in square brackets. Default is an empty list which means use the traditional default angles (45 and 135 degrees).", 
                    "label": "Top Surface Skin Line Directions", 
                    "enabled": "=roofing_pattern != 'concentric' and roofing_layer_count > 0 and top_layers > 0", 
                    "value": "=skin_angles"
                }, 
                "skin_alternate_rotation": {
                    "limit_to_extruder": "=top_bottom_extruder_nr", 
                    "settable_per_mesh": "True", 
                    "type": "bool", 
                    "children": {}, 
                    "enabled": "=top_bottom_pattern != 'concentric'", 
                    "label": "Alternate Skin Rotation", 
                    "description": "Alternate the direction in which the top/bottom layers are printed. Normally they are printed diagonally only. This setting adds the X-only and Y-only directions.", 
                    "default_value": "False"
                }, 
                "support_conical_min_width": {
                    "settable_per_mesh": "True", 
                    "maximum_value_warning": "=100.0", 
                    "unit": "mm", 
                    "enabled": "=support_conical_enabled and support_enable", 
                    "label": "Conical Support Minimum Width", 
                    "minimum_value_warning": "=machine_nozzle_size * 3", 
                    "limit_to_extruder": "=support_infill_extruder_nr", 
                    "minimum_value": "=0", 
                    "type": "float", 
                    "children": {}, 
                    "description": "Minimum width to which the base of the conical support area is reduced. Small widths can lead to unstable support structures.", 
                    "default_value": "5.0"
                }, 
                "wireframe_bottom_delay": {
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=1", 
                    "unit": "s", 
                    "settable_per_extruder": "False", 
                    "enabled": "=wireframe_enabled", 
                    "label": "WP Bottom Delay", 
                    "minimum_value": "=0", 
                    "type": "float", 
                    "children": {}, 
                    "description": "Delay time after a downward move. Only applies to Wire Printing.", 
                    "settable_per_meshgroup": "False", 
                    "default_value": "0"
                }, 
                "draft_shield_height": {
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=9999", 
                    "unit": "mm", 
                    "settable_per_extruder": "False", 
                    "enabled": "=draft_shield_enabled and draft_shield_height_limitation == 'limited'", 
                    "label": "Draft Shield Height", 
                    "value": "=10", 
                    "minimum_value": "=0", 
                    "type": "float", 
                    "children": {}, 
                    "description": "Height limitation of the draft shield. Above this height no draft shield will be printed.", 
                    "default_value": "10"
                }, 
                "infill_enable_travel_optimization": {
                    "settable_per_mesh": "True", 
                    "type": "bool", 
                    "children": {}, 
                    "description": "When enabled, the order in which the infill lines are printed is optimized to reduce the distance travelled. The reduction in travel time achieved very much depends on the model being sliced, infill pattern, density, etc. Note that, for some models that have many small areas of infill, the time to slice the model may be greatly increased.", 
                    "label": "Infill Travel Optimization", 
                    "default_value": "False"
                }, 
                "wireframe_up_half_speed": {
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=5.0", 
                    "unit": "mm", 
                    "settable_per_extruder": "False", 
                    "enabled": "=wireframe_enabled", 
                    "label": "WP Ease Upward", 
                    "minimum_value": "=0", 
                    "type": "float", 
                    "children": {}, 
                    "description": "Distance of an upward move which is extruded with half speed.\nThis can cause better adhesion to previous layers, while not heating the material in those layers too much. Only applies to Wire Printing.", 
                    "settable_per_meshgroup": "False", 
                    "default_value": "0.3"
                }, 
                "material_flow_temp_graph": {
                    "settable_per_mesh": "False", 
                    "type": "str", 
                    "unit": "[[mm\u00b3,\u00b0C]]", 
                    "children": {}, 
                    "enabled": "=False and machine_nozzle_temp_enabled and material_flow_dependent_temperature", 
                    "label": "Flow Temperature Graph", 
                    "description": "Data linking material flow (in mm3 per second) to temperature (degrees Celsius).", 
                    "settable_per_extruder": "True", 
                    "default_value": "[[3.5,200],[7.0,240]]"
                }, 
                "conical_overhang_enabled": {
                    "children": {}, 
                    "description": "Change the geometry of the printed model such that minimal support is required. Steep overhangs will become shallow overhangs. Overhanging areas will drop down to become more vertical.", 
                    "label": "Make Overhang Printable", 
                    "default_value": "False", 
                    "type": "bool"
                }, 
                "draft_shield_height_limitation": {
                    "resolve": "='full' if 'full' in extruderValues('draft_shield_height_limitation') else 'limited'", 
                    "settable_per_mesh": "False", 
                    "type": "enum", 
                    "options": "OrderedDict([('full', 'Full'), ('limited', 'Limited')])", 
                    "children": {}, 
                    "enabled": "=draft_shield_enabled", 
                    "label": "Draft Shield Limitation", 
                    "description": "Set the height of the draft shield. Choose to print the draft shield at the full height of the model or at a limited height.", 
                    "settable_per_extruder": "False", 
                    "default_value": "full"
                }, 
                "support_skip_some_zags": {
                    "limit_to_extruder": "=support_infill_extruder_nr", 
                    "settable_per_mesh": "False", 
                    "type": "bool", 
                    "children": {}, 
                    "enabled": "=support_enable and (support_pattern == 'zigzag')", 
                    "label": "Break Up Support In Chunks", 
                    "description": "Skip some support line connections to make the support structure easier to break away. This setting is applicable to the Zig Zag support infill pattern.", 
                    "settable_per_extruder": "True", 
                    "default_value": "False"
                }, 
                "draft_shield_dist": {
                    "resolve": "=max(extruderValues('draft_shield_dist'))", 
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=10", 
                    "unit": "mm", 
                    "settable_per_extruder": "False", 
                    "enabled": "=draft_shield_enabled", 
                    "label": "Draft Shield X/Y Distance", 
                    "minimum_value": "=0", 
                    "type": "float", 
                    "children": {}, 
                    "description": "Distance of the draft shield from the print, in the X/Y directions.", 
                    "default_value": "10"
                }, 
                "wireframe_roof_outer_delay": {
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=2.0", 
                    "unit": "s", 
                    "settable_per_extruder": "False", 
                    "enabled": "=wireframe_enabled", 
                    "label": "WP Roof Outer Delay", 
                    "minimum_value": "=0", 
                    "type": "float", 
                    "children": {}, 
                    "description": "Time spent at the outer perimeters of hole which is to become a roof. Longer times can ensure a better connection. Only applies to Wire Printing.", 
                    "settable_per_meshgroup": "False", 
                    "default_value": "0.2"
                }, 
                "conical_overhang_angle": {
                    "minimum_value": "=-89", 
                    "minimum_value_warning": "=0", 
                    "type": "float", 
                    "unit": "\u00b0", 
                    "children": {}, 
                    "description": "The maximum angle of overhangs after the they have been made printable. At a value of 0\u00b0 all overhangs are replaced by a piece of model connected to the build plate, 90\u00b0 will not change the model in any way.", 
                    "maximum_value": "=89", 
                    "label": "Maximum Model Angle", 
                    "enabled": "=conical_overhang_enabled", 
                    "default_value": "50"
                }, 
                "adaptive_layer_height_variation": {
                    "settable_per_mesh": "False", 
                    "type": "float", 
                    "children": {}, 
                    "enabled": "=adaptive_layer_height_enabled", 
                    "settable_per_meshgroup": "False", 
                    "label": "Adaptive layers maximum variation", 
                    "description": "The maximum allowed height different from the base layer height in mm.", 
                    "settable_per_extruder": "False", 
                    "default_value": "0.1"
                }, 
                "magic_fuzzy_skin_enabled": {
                    "limit_to_extruder": "=wall_0_extruder_nr", 
                    "settable_per_mesh": "True", 
                    "type": "bool", 
                    "children": {}, 
                    "description": "Randomly jitter while printing the outer wall, so that the surface has a rough and fuzzy look.", 
                    "label": "Fuzzy Skin", 
                    "default_value": "False"
                }, 
                "material_flow_dependent_temperature": {
                    "settable_per_mesh": "False", 
                    "type": "bool", 
                    "children": {}, 
                    "enabled": "=machine_nozzle_temp_enabled and False", 
                    "label": "Auto Temperature", 
                    "description": "Change the temperature for each layer automatically with the average flow speed of that layer.", 
                    "settable_per_extruder": "True", 
                    "default_value": "False"
                }, 
                "cross_infill_pocket_size": {
                    "settable_per_mesh": "True", 
                    "maximum_value_warning": "=infill_line_distance * math.sqrt(2)", 
                    "unit": "mm", 
                    "enabled": "=infill_pattern == 'cross_3d'", 
                    "label": "Cross 3D Pocket Size", 
                    "value": "=infill_line_distance", 
                    "limit_to_extruder": "=infill_extruder_nr", 
                    "minimum_value": "=0", 
                    "type": "float", 
                    "children": {}, 
                    "description": "The size of pockets at four-way crossings in the cross 3D pattern at heights where the pattern is touching itself.", 
                    "default_value": "2.0"
                }, 
                "coasting_enable": {
                    "settable_per_mesh": "False", 
                    "type": "bool", 
                    "children": {}, 
                    "description": "Coasting replaces the last part of an extrusion path with a travel path. The oozed material is used to print the last piece of the extrusion path in order to reduce stringing.", 
                    "label": "Enable Coasting", 
                    "default_value": "False", 
                    "settable_per_extruder": "True"
                }, 
                "wireframe_roof_fall_down": {
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=wireframe_roof_inset", 
                    "unit": "mm", 
                    "settable_per_extruder": "False", 
                    "enabled": "=wireframe_enabled", 
                    "label": "WP Roof Fall Down", 
                    "minimum_value_warning": "=0", 
                    "type": "float", 
                    "children": {}, 
                    "description": "The distance which horizontal roof lines printed 'in thin air' fall down when being printed. This distance is compensated for. Only applies to Wire Printing.", 
                    "settable_per_meshgroup": "False", 
                    "default_value": "2"
                }, 
                "flow_rate_max_extrusion_offset": {
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=10", 
                    "unit": "mm", 
                    "settable_per_extruder": "False", 
                    "enabled": "=True", 
                    "label": "Flow rate compensation max extrusion offset", 
                    "value": "=0", 
                    "minimum_value": "=0", 
                    "type": "float", 
                    "children": {}, 
                    "description": "The maximum distance in mm to compensate for pressure in the bowden tube.", 
                    "settable_per_meshgroup": "False", 
                    "default_value": "0"
                }, 
                "wireframe_nozzle_clearance": {
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=10.0", 
                    "unit": "mm", 
                    "settable_per_extruder": "False", 
                    "enabled": "=wireframe_enabled", 
                    "label": "WP Nozzle Clearance", 
                    "minimum_value_warning": "=0", 
                    "type": "float", 
                    "children": {}, 
                    "description": "Distance between the nozzle and horizontally downward lines. Larger clearance results in diagonally downward lines with a less steep angle, which in turn results in less upward connections with the next layer. Only applies to Wire Printing.", 
                    "settable_per_meshgroup": "False", 
                    "default_value": "1"
                }, 
                "wireframe_strategy": {
                    "settable_per_mesh": "False", 
                    "type": "enum", 
                    "options": "OrderedDict([('compensate', 'Compensate'), ('knot', 'Knot'), ('retract', 'Retract')])", 
                    "children": {}, 
                    "enabled": "=wireframe_enabled", 
                    "settable_per_meshgroup": "False", 
                    "label": "WP Strategy", 
                    "description": "Strategy for making sure two consecutive layers connect at each connection point. Retraction lets the upward lines harden in the right position, but may cause filament grinding. A knot can be made at the end of an upward line to heighten the chance of connecting to it and to let the line cool; however, it may require slow printing speeds. Another strategy is to compensate for the sagging of the top of an upward line; however, the lines won't always fall down as predicted.", 
                    "settable_per_extruder": "False", 
                    "default_value": "compensate"
                }, 
                "support_tree_collision_resolution": {
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=support_line_width * 2", 
                    "unit": "mm", 
                    "settable_per_extruder": "True", 
                    "enabled": "=support_tree_enable and support_tree_branch_diameter_angle > 0", 
                    "label": "Tree Support Collision Resolution", 
                    "minimum_value": "=0.001", 
                    "value": "=support_line_width / 2", 
                    "limit_to_extruder": "=support_infill_extruder_nr", 
                    "minimum_value_warning": "=support_line_width / 4", 
                    "type": "float", 
                    "children": {}, 
                    "description": "Resolution to compute collisions with to avoid hitting the model. Setting this lower will produce more accurate trees that fail less often, but increases slicing time dramatically.", 
                    "default_value": "0.4"
                }, 
                "adaptive_layer_height_threshold": {
                    "settable_per_mesh": "False", 
                    "type": "float", 
                    "children": {}, 
                    "enabled": "=adaptive_layer_height_enabled", 
                    "settable_per_meshgroup": "False", 
                    "label": "Adaptive layers threshold", 
                    "description": "Threshold whether to use a smaller layer or not. This number is compared to the tan of the steepest slope in a layer.", 
                    "settable_per_extruder": "False", 
                    "default_value": "200.0"
                }, 
                "flow_rate_extrusion_offset_factor": {
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=100", 
                    "unit": "%", 
                    "settable_per_extruder": "False", 
                    "enabled": "=True", 
                    "label": "Flow rate compensation factor", 
                    "value": "=100", 
                    "minimum_value": "=0", 
                    "type": "float", 
                    "children": {}, 
                    "description": "The multiplication factor for the flow rate -> distance translation.", 
                    "settable_per_meshgroup": "False", 
                    "default_value": "100"
                }, 
                "draft_shield_enabled": {
                    "settable_per_mesh": "False", 
                    "type": "bool", 
                    "children": {}, 
                    "description": "This will create a wall around the model, which traps (hot) air and shields against exterior airflow. Especially useful for materials which warp easily.", 
                    "label": "Enable Draft Shield", 
                    "default_value": "False", 
                    "settable_per_extruder": "False"
                }, 
                "adaptive_layer_height_variation_step": {
                    "settable_per_mesh": "False", 
                    "type": "float", 
                    "children": {}, 
                    "enabled": "=adaptive_layer_height_enabled", 
                    "settable_per_meshgroup": "False", 
                    "label": "Adaptive layers variation step size", 
                    "description": "The difference in height of the next layer height compared to the previous one.", 
                    "settable_per_extruder": "False", 
                    "default_value": "0.01"
                }, 
                "support_conical_enabled": {
                    "limit_to_extruder": "=support_infill_extruder_nr", 
                    "settable_per_mesh": "True", 
                    "type": "bool", 
                    "children": {}, 
                    "enabled": "=support_enable", 
                    "label": "Enable Conical Support", 
                    "description": "Experimental feature: Make support areas smaller at the bottom than at the overhang.", 
                    "default_value": "False"
                }, 
                "spaghetti_inset": {
                    "limit_to_extruder": "=infill_extruder_nr", 
                    "minimum_value_warning": "=0", 
                    "settable_per_mesh": "True", 
                    "maximum_value_warning": "=5.0", 
                    "type": "float", 
                    "unit": "mm", 
                    "children": {}, 
                    "enabled": "=infill_sparse_density > 0 and spaghetti_infill_enabled", 
                    "label": "Spaghetti Inset", 
                    "description": "The offset from the walls from where the spaghetti infill will be printed.", 
                    "default_value": "0.2"
                }, 
                "support_tree_enable": {
                    "settable_per_mesh": "True", 
                    "type": "bool", 
                    "children": {}, 
                    "description": "Generate a tree-like support with branches that support your print. This may reduce material usage and print time, but greatly increases slicing time.", 
                    "label": "Tree Support", 
                    "default_value": "False", 
                    "settable_per_extruder": "False"
                }, 
                "roofing_line_width": {
                    "settable_per_mesh": "True", 
                    "maximum_value_warning": "=2 * machine_nozzle_size", 
                    "unit": "mm", 
                    "enabled": "=roofing_layer_count > 0 and top_layers > 0", 
                    "label": "Top Surface Skin Line Width", 
                    "minimum_value": "=0.001", 
                    "value": "=skin_line_width", 
                    "limit_to_extruder": "=roofing_extruder_nr", 
                    "minimum_value_warning": "=0.1 + 0.4 * machine_nozzle_size", 
                    "type": "float", 
                    "children": {}, 
                    "description": "Width of a single line of the areas at the top of the print.", 
                    "default_value": "0.4"
                }, 
                "support_tree_angle": {
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=60", 
                    "maximum_value": "=90", 
                    "unit": "\u00b0", 
                    "settable_per_extruder": "True", 
                    "enabled": "=support_tree_enable", 
                    "label": "Tree Support Branch Angle", 
                    "limit_to_extruder": "=support_infill_extruder_nr", 
                    "minimum_value": "=0", 
                    "type": "float", 
                    "children": {}, 
                    "description": "The angle of the branches. Use a lower angle to make them more vertical and more stable. Use a higher angle to be able to have more reach.", 
                    "default_value": "40"
                }, 
                "meshfix_maximum_resolution": {
                    "minimum_value_warning": "=0.005", 
                    "settable_per_mesh": "True", 
                    "maximum_value_warning": "=0.1", 
                    "type": "float", 
                    "unit": "mm", 
                    "children": {}, 
                    "description": "The minimum size of a line segment after slicing. If you increase this, the mesh will have a lower resolution. This may allow the printer to keep up with the speed it has to process g-code and will increase slice speed by removing details of the mesh that it can't process anyway.", 
                    "label": "Maximum Resolution", 
                    "minimum_value": "=0.001", 
                    "default_value": "0.01"
                }, 
                "wireframe_flat_delay": {
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=0.5", 
                    "unit": "s", 
                    "settable_per_extruder": "False", 
                    "enabled": "=wireframe_enabled", 
                    "label": "WP Flat Delay", 
                    "minimum_value": "=0", 
                    "type": "float", 
                    "children": {}, 
                    "description": "Delay time between two horizontal segments. Introducing such a delay can cause better adhesion to previous layers at the connection points, while too long delays cause sagging. Only applies to Wire Printing.", 
                    "settable_per_meshgroup": "False", 
                    "default_value": "0.1"
                }, 
                "support_tree_branch_diameter_angle": {
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=15", 
                    "maximum_value": "=89.9999", 
                    "unit": "\u00b0", 
                    "settable_per_extruder": "True", 
                    "enabled": "=support_tree_enable", 
                    "label": "Tree Support Branch Diameter Angle", 
                    "limit_to_extruder": "=support_infill_extruder_nr", 
                    "minimum_value": "=0", 
                    "type": "float", 
                    "children": {}, 
                    "description": "The angle of the branches' diameter as they gradually become thicker towards the bottom. An angle of 0 will cause the branches to have uniform thickness over their length. A bit of an angle can increase stability of the tree support.", 
                    "default_value": "5"
                }, 
                "wireframe_top_delay": {
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=1", 
                    "unit": "s", 
                    "settable_per_extruder": "False", 
                    "enabled": "=wireframe_enabled", 
                    "label": "WP Top Delay", 
                    "minimum_value": "=0", 
                    "type": "float", 
                    "children": {}, 
                    "description": "Delay time after an upward move, so that the upward line can harden. Only applies to Wire Printing.", 
                    "settable_per_meshgroup": "False", 
                    "default_value": "0"
                }, 
                "support_tree_branch_diameter": {
                    "settable_per_mesh": "False", 
                    "unit": "mm", 
                    "settable_per_extruder": "True", 
                    "enabled": "=support_tree_enable", 
                    "label": "Tree Support Branch Diameter", 
                    "minimum_value_warning": "=support_line_width * 2", 
                    "limit_to_extruder": "=support_infill_extruder_nr", 
                    "minimum_value": "=0.001", 
                    "type": "float", 
                    "children": {}, 
                    "description": "The diameter of the thinnest branches of tree support. Thicker branches are more sturdy. Branches towards the base will be thicker than this.", 
                    "default_value": "2"
                }, 
                "infill_hollow": {
                    "settable_per_mesh": "True", 
                    "type": "bool", 
                    "children": {}, 
                    "description": "Remove all infill and make the inside of the object eligible for support.", 
                    "label": "Hollow Out Objects", 
                    "default_value": "False"
                }, 
                "spaghetti_max_height": {
                    "limit_to_extruder": "=infill_extruder_nr", 
                    "minimum_value": "=layer_height", 
                    "settable_per_mesh": "True", 
                    "maximum_value_warning": "=10.0", 
                    "type": "float", 
                    "unit": "mm", 
                    "children": {}, 
                    "enabled": "=infill_sparse_density > 0 and spaghetti_infill_enabled and spaghetti_infill_stepped", 
                    "label": "Spaghetti Infill Maximum Height", 
                    "description": "The maximum height of inside space which can be combined and filled from the top.", 
                    "default_value": "2.0"
                }, 
                "wireframe_roof_drag_along": {
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=10", 
                    "unit": "mm", 
                    "settable_per_extruder": "False", 
                    "enabled": "=wireframe_enabled", 
                    "label": "WP Roof Drag Along", 
                    "minimum_value": "=0", 
                    "type": "float", 
                    "children": {}, 
                    "description": "The distance of the end piece of an inward line which gets dragged along when going back to the outer outline of the roof. This distance is compensated for. Only applies to Wire Printing.", 
                    "settable_per_meshgroup": "False", 
                    "default_value": "0.8"
                }, 
                "coasting_volume": {
                    "minimum_value": "=0", 
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=machine_nozzle_size * 5", 
                    "type": "float", 
                    "unit": "mm\u00b3", 
                    "children": {}, 
                    "enabled": "=coasting_enable", 
                    "label": "Coasting Volume", 
                    "description": "The volume otherwise oozed. This value should generally be close to the nozzle diameter cubed.", 
                    "settable_per_extruder": "True", 
                    "default_value": "0.064"
                }, 
                "wireframe_fall_down": {
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=wireframe_height", 
                    "unit": "mm", 
                    "settable_per_extruder": "False", 
                    "enabled": "=wireframe_enabled", 
                    "label": "WP Fall Down", 
                    "minimum_value": "=0", 
                    "type": "float", 
                    "children": {}, 
                    "description": "Distance with which the material falls down after an upward extrusion. This distance is compensated for. Only applies to Wire Printing.", 
                    "settable_per_meshgroup": "False", 
                    "default_value": "0.5"
                }, 
                "wireframe_roof_inset": {
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=20", 
                    "unit": "mm", 
                    "settable_per_extruder": "False", 
                    "enabled": "=wireframe_enabled", 
                    "label": "WP Roof Inset Distance", 
                    "minimum_value": "=0", 
                    "value": "=wireframe_height", 
                    "minimum_value_warning": "=machine_nozzle_size", 
                    "type": "float", 
                    "children": {}, 
                    "description": "The distance covered when making a connection from a roof outline inward. Only applies to Wire Printing.", 
                    "settable_per_meshgroup": "False", 
                    "default_value": "3"
                }, 
                "coasting_speed": {
                    "minimum_value": "=0.0001", 
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=100", 
                    "type": "float", 
                    "unit": "%", 
                    "children": {}, 
                    "enabled": "=coasting_enable", 
                    "label": "Coasting Speed", 
                    "description": "The speed by which to move during coasting, relative to the speed of the extrusion path. A value slightly under 100% is advised, since during the coasting move the pressure in the bowden tube drops.", 
                    "settable_per_extruder": "True", 
                    "default_value": "90"
                }, 
                "spaghetti_flow": {
                    "limit_to_extruder": "=infill_extruder_nr", 
                    "minimum_value": "=0", 
                    "settable_per_mesh": "True", 
                    "maximum_value_warning": "=100", 
                    "type": "float", 
                    "unit": "%", 
                    "children": {}, 
                    "enabled": "=infill_sparse_density > 0 and spaghetti_infill_enabled", 
                    "label": "Spaghetti Flow", 
                    "description": "Adjusts the density of the spaghetti infill. Note that the Infill Density only controls the line spacing of the filling pattern, not the amount of extrusion for spaghetti infill.", 
                    "default_value": "20"
                }, 
                "support_skip_zag_per_mm": {
                    "settable_per_mesh": "False", 
                    "unit": "mm", 
                    "settable_per_extruder": "True", 
                    "enabled": "=support_enable and (support_pattern == 'zigzag') and support_skip_some_zags", 
                    "label": "Support Chunk Size", 
                    "minimum_value_warning": "=support_line_distance", 
                    "limit_to_extruder": "=support_infill_extruder_nr", 
                    "minimum_value": "=0", 
                    "type": "float", 
                    "children": {
                        "support_zag_skip_count": {
                            "settable_per_mesh": "False", 
                            "settable_per_extruder": "True", 
                            "enabled": "=support_enable and (support_pattern == 'zigzag') and support_skip_some_zags", 
                            "label": "Support Chunk Line Count", 
                            "minimum_value_warning": "=3", 
                            "value": "=0 if support_line_distance == 0 else round(support_skip_zag_per_mm / support_line_distance)", 
                            "limit_to_extruder": "=support_infill_extruder_nr", 
                            "minimum_value": "=1", 
                            "type": "int", 
                            "children": {}, 
                            "description": "Skip one in every N connection lines to make the support structure easier to break away.", 
                            "default_value": "5"
                        }
                    }, 
                    "description": "Leave out a connection between support lines once every N millimeter to make the support structure easier to break away.", 
                    "default_value": "20"
                }, 
                "wireframe_enabled": {
                    "settable_per_mesh": "False", 
                    "type": "bool", 
                    "children": {}, 
                    "description": "Print only the outside surface with a sparse webbed structure, printing 'in thin air'. This is realized by horizontally printing the contours of the model at given Z intervals which are connected via upward and diagonally downward lines.", 
                    "settable_per_meshgroup": "False", 
                    "label": "Wire Printing", 
                    "default_value": "False", 
                    "settable_per_extruder": "False"
                }, 
                "adaptive_layer_height_enabled": {
                    "settable_per_mesh": "False", 
                    "type": "bool", 
                    "children": {}, 
                    "description": "Adaptive layers computes the layer heights depending on the shape of the model.", 
                    "settable_per_meshgroup": "False", 
                    "label": "Use adaptive layers", 
                    "default_value": "False", 
                    "settable_per_extruder": "False"
                }, 
                "spaghetti_max_infill_angle": {
                    "settable_per_mesh": "True", 
                    "maximum_value_warning": "=45", 
                    "maximum_value": "=90", 
                    "unit": "\u00b0", 
                    "enabled": "=infill_sparse_density > 0 and spaghetti_infill_enabled and spaghetti_infill_stepped", 
                    "label": "Spaghetti Maximum Infill Angle", 
                    "limit_to_extruder": "=infill_extruder_nr", 
                    "minimum_value": "=0", 
                    "type": "float", 
                    "children": {}, 
                    "description": "The maximum angle w.r.t. the Z axis of the inside of the print for areas which are to be filled with spaghetti infill afterwards. Lowering this value causes more angled parts in your model to be filled on each layer.", 
                    "default_value": "10"
                }, 
                "wireframe_straight_before_down": {
                    "settable_per_mesh": "False", 
                    "maximum_value": "=100", 
                    "unit": "%", 
                    "settable_per_extruder": "False", 
                    "enabled": "=wireframe_enabled", 
                    "label": "WP Straighten Downward Lines", 
                    "minimum_value": "=0", 
                    "type": "float", 
                    "children": {}, 
                    "description": "Percentage of a diagonally downward line which is covered by a horizontal line piece. This can prevent sagging of the top most point of upward lines. Only applies to Wire Printing.", 
                    "settable_per_meshgroup": "False", 
                    "default_value": "20"
                }, 
                "wireframe_top_jump": {
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=2.0", 
                    "unit": "mm", 
                    "settable_per_extruder": "False", 
                    "enabled": "=wireframe_enabled", 
                    "label": "WP Knot Size", 
                    "minimum_value": "=0", 
                    "type": "float", 
                    "children": {}, 
                    "description": "Creates a small knot at the top of an upward line, so that the consecutive horizontal layer has a better chance to connect to it. Only applies to Wire Printing.", 
                    "settable_per_meshgroup": "False", 
                    "default_value": "0.6"
                }, 
                "roofing_pattern": {
                    "limit_to_extruder": "=roofing_extruder_nr", 
                    "settable_per_mesh": "True", 
                    "type": "enum", 
                    "options": "OrderedDict([('lines', 'Lines'), ('concentric', 'Concentric'), ('zigzag', 'Zig Zag')])", 
                    "children": {}, 
                    "description": "The pattern of the top most layers.", 
                    "default_value": "lines", 
                    "label": "Top Surface Skin Pattern", 
                    "enabled": "=roofing_layer_count > 0 and top_layers > 0", 
                    "value": "=top_bottom_pattern"
                }, 
                "support_conical_angle": {
                    "settable_per_mesh": "True", 
                    "maximum_value_warning": "=45", 
                    "maximum_value": "=90", 
                    "unit": "\u00b0", 
                    "enabled": "=support_conical_enabled and support_enable", 
                    "label": "Conical Support Angle", 
                    "minimum_value": "=-90", 
                    "limit_to_extruder": "=support_infill_extruder_nr", 
                    "minimum_value_warning": "=-45", 
                    "type": "float", 
                    "children": {}, 
                    "description": "The angle of the tilt of conical support. With 0 degrees being vertical, and 90 degrees being horizontal. Smaller angles cause the support to be more sturdy, but consist of more material. Negative angles cause the base of the support to be wider than the top.", 
                    "default_value": "30"
                }, 
                "magic_fuzzy_skin_thickness": {
                    "limit_to_extruder": "=wall_0_extruder_nr", 
                    "minimum_value": "=0.001", 
                    "settable_per_mesh": "True", 
                    "maximum_value_warning": "=wall_line_width_0", 
                    "type": "float", 
                    "unit": "mm", 
                    "children": {}, 
                    "enabled": "=magic_fuzzy_skin_enabled", 
                    "label": "Fuzzy Skin Thickness", 
                    "description": "The width within which to jitter. It's advised to keep this below the outer wall width, since the inner walls are unaltered.", 
                    "default_value": "0.3"
                }, 
                "wireframe_flow": {
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=100", 
                    "unit": "%", 
                    "settable_per_extruder": "False", 
                    "enabled": "=wireframe_enabled", 
                    "label": "WP Flow", 
                    "minimum_value": "=0", 
                    "type": "float", 
                    "children": {
                        "wireframe_flow_connection": {
                            "settable_per_mesh": "False", 
                            "maximum_value_warning": "=100", 
                            "unit": "%", 
                            "settable_per_extruder": "False", 
                            "enabled": "=wireframe_enabled", 
                            "label": "WP Connection Flow", 
                            "value": "=wireframe_flow", 
                            "minimum_value": "=0", 
                            "type": "float", 
                            "children": {}, 
                            "description": "Flow compensation when going up or down. Only applies to Wire Printing.", 
                            "settable_per_meshgroup": "False", 
                            "default_value": "100"
                        }, 
                        "wireframe_flow_flat": {
                            "settable_per_mesh": "False", 
                            "maximum_value_warning": "=100", 
                            "unit": "%", 
                            "settable_per_extruder": "False", 
                            "enabled": "=wireframe_enabled", 
                            "label": "WP Flat Flow", 
                            "value": "=wireframe_flow", 
                            "minimum_value": "=0", 
                            "type": "float", 
                            "children": {}, 
                            "description": "Flow compensation when printing flat lines. Only applies to Wire Printing.", 
                            "settable_per_meshgroup": "False", 
                            "default_value": "100"
                        }
                    }, 
                    "description": "Flow compensation: the amount of material extruded is multiplied by this value. Only applies to Wire Printing.", 
                    "settable_per_meshgroup": "False", 
                    "default_value": "100"
                }, 
                "support_tree_wall_thickness": {
                    "settable_per_mesh": "False", 
                    "unit": "mm", 
                    "settable_per_extruder": "True", 
                    "enabled": "=support_tree_enable", 
                    "label": "Tree Support Wall Thickness", 
                    "minimum_value": "=0", 
                    "value": "=support_line_width", 
                    "limit_to_extruder": "=support_infill_extruder_nr", 
                    "minimum_value_warning": "=wall_line_width", 
                    "type": "float", 
                    "children": {
                        "support_tree_wall_count": {
                            "settable_per_mesh": "False", 
                            "settable_per_extruder": "True", 
                            "enabled": "=support_tree_enable", 
                            "label": "Tree Support Wall Line Count", 
                            "minimum_value_warning": "=1", 
                            "value": "=round(support_tree_wall_thickness / support_line_width)", 
                            "limit_to_extruder": "=support_infill_extruder_nr", 
                            "minimum_value": "=0", 
                            "type": "int", 
                            "children": {}, 
                            "description": "The number of walls of the branches of tree support. Thicker walls take longer to print but don't fall over as easily.", 
                            "default_value": "1"
                        }
                    }, 
                    "description": "The thickness of the walls of the branches of tree support. Thicker walls take longer to print but don't fall over as easily.", 
                    "default_value": "0.8"
                }, 
                "slicing_tolerance": {
                    "settable_per_mesh": "True", 
                    "type": "enum", 
                    "options": "OrderedDict([('middle', 'Middle'), ('exclusive', 'Exclusive'), ('inclusive', 'Inclusive')])", 
                    "children": {}, 
                    "description": "How to slice layers with diagonal surfaces. The areas of a layer can be generated based on where the middle of the layer intersects the surface (Middle). Alternatively each layer can have the areas which fall inside of the volume throughout the height of the layer (Exclusive) or a layer has the areas which fall inside anywhere within the layer (Inclusive). Exclusive retains the most details, Inclusive makes for the best fit and Middle takes the least time to process.", 
                    "label": "Slicing Tolerance", 
                    "default_value": "middle"
                }, 
                "cross_infill_apply_pockets_alternatingly": {
                    "limit_to_extruder": "=infill_extruder_nr", 
                    "settable_per_mesh": "True", 
                    "type": "bool", 
                    "children": {}, 
                    "enabled": "=infill_pattern == 'cross_3d'", 
                    "label": "Alternate Cross 3D Pockets", 
                    "description": "Only apply pockets at half of the four-way crossings in the cross 3D pattern and alternate the location of the pockets between heights where the pattern is touching itself.", 
                    "default_value": "True"
                }, 
                "wireframe_drag_along": {
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=wireframe_height", 
                    "unit": "mm", 
                    "settable_per_extruder": "False", 
                    "enabled": "=wireframe_enabled", 
                    "label": "WP Drag Along", 
                    "minimum_value": "=0", 
                    "type": "float", 
                    "children": {}, 
                    "description": "Distance with which the material of an upward extrusion is dragged along with the diagonally downward extrusion. This distance is compensated for. Only applies to Wire Printing.", 
                    "settable_per_meshgroup": "False", 
                    "default_value": "0.6"
                }, 
                "support_tree_branch_distance": {
                    "limit_to_extruder": "=support_infill_extruder_nr", 
                    "minimum_value": "=0.001", 
                    "settable_per_mesh": "True", 
                    "type": "float", 
                    "unit": "mm", 
                    "children": {}, 
                    "enabled": "=support_tree_enable", 
                    "label": "Tree Support Branch Distance", 
                    "description": "How far apart the branches need to be when they touch the model. Making this distance small will cause the tree support to touch the model at more points, causing better overhang but making support harder to remove.", 
                    "default_value": "4"
                }, 
                "spaghetti_infill_stepped": {
                    "limit_to_extruder": "=infill_extruder_nr", 
                    "settable_per_mesh": "True", 
                    "type": "bool", 
                    "children": {}, 
                    "enabled": "=infill_sparse_density > 0 and spaghetti_infill_enabled", 
                    "label": "Spaghetti Infill Stepping", 
                    "description": "Whether to print spaghetti infill in steps or extrude all the infill filament at the end of the print.", 
                    "default_value": "True"
                }, 
                "coasting_min_volume": {
                    "minimum_value": "=0", 
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=10.0", 
                    "type": "float", 
                    "unit": "mm\u00b3", 
                    "children": {}, 
                    "enabled": "=coasting_enable", 
                    "label": "Minimum Volume Before Coasting", 
                    "description": "The smallest volume an extrusion path should have before allowing coasting. For smaller extrusion paths, less pressure has been built up in the bowden tube and so the coasted volume is scaled linearly. This value should always be larger than the Coasting Volume.", 
                    "settable_per_extruder": "True", 
                    "default_value": "0.8"
                }, 
                "spaghetti_infill_enabled": {
                    "limit_to_extruder": "=infill_extruder_nr", 
                    "settable_per_mesh": "True", 
                    "type": "bool", 
                    "children": {}, 
                    "enabled": "=infill_sparse_density > 0", 
                    "label": "Spaghetti Infill", 
                    "description": "Print the infill every so often, so that the filament will curl up chaotically inside the object. This reduces print time, but the behaviour is rather unpredictable.", 
                    "default_value": "False"
                }, 
                "spaghetti_infill_extra_volume": {
                    "limit_to_extruder": "=infill_extruder_nr", 
                    "minimum_value_warning": "=0", 
                    "settable_per_mesh": "True", 
                    "maximum_value_warning": "=100", 
                    "type": "float", 
                    "unit": "mm\u00b3", 
                    "children": {}, 
                    "enabled": "=infill_sparse_density > 0 and spaghetti_infill_enabled", 
                    "label": "Spaghetti Infill Extra Volume", 
                    "description": "A correction term to adjust the total volume being extruded each time when filling spaghetti.", 
                    "default_value": "0"
                }, 
                "magic_fuzzy_skin_point_density": {
                    "settable_per_mesh": "True", 
                    "maximum_value_warning": "=10", 
                    "maximum_value": "=2 / magic_fuzzy_skin_thickness", 
                    "unit": "1/mm", 
                    "enabled": "=magic_fuzzy_skin_enabled", 
                    "label": "Fuzzy Skin Density", 
                    "minimum_value": "=0.008", 
                    "limit_to_extruder": "=wall_0_extruder_nr", 
                    "minimum_value_warning": "=0.1", 
                    "type": "float", 
                    "children": {
                        "magic_fuzzy_skin_point_dist": {
                            "settable_per_mesh": "True", 
                            "maximum_value_warning": "=10", 
                            "unit": "mm", 
                            "enabled": "=magic_fuzzy_skin_enabled", 
                            "label": "Fuzzy Skin Point Distance", 
                            "minimum_value": "=magic_fuzzy_skin_thickness / 2", 
                            "value": "=10000 if magic_fuzzy_skin_point_density == 0 else 1 / magic_fuzzy_skin_point_density", 
                            "limit_to_extruder": "=wall_0_extruder_nr", 
                            "minimum_value_warning": "=0.1", 
                            "type": "float", 
                            "children": {}, 
                            "description": "The average distance between the random points introduced on each line segment. Note that the original points of the polygon are discarded, so a high smoothness results in a reduction of the resolution. This value must be higher than half the Fuzzy Skin Thickness.", 
                            "default_value": "0.8"
                        }
                    }, 
                    "description": "The average density of points introduced on each polygon in a layer. Note that the original points of the polygon are discarded, so a low density results in a reduction of the resolution.", 
                    "default_value": "1.25"
                }, 
                "wireframe_printspeed": {
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=50", 
                    "maximum_value": "=math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2 + max(max_feedrate_z_override, machine_max_feedrate_z) ** 2)", 
                    "unit": "mm/s", 
                    "settable_per_extruder": "False", 
                    "enabled": "=wireframe_enabled", 
                    "label": "WP Speed", 
                    "minimum_value": "=0.1", 
                    "type": "float", 
                    "children": {
                        "wireframe_printspeed_bottom": {
                            "settable_per_mesh": "False", 
                            "maximum_value_warning": "=50", 
                            "maximum_value": "=math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)", 
                            "unit": "mm/s", 
                            "settable_per_extruder": "False", 
                            "enabled": "=wireframe_enabled", 
                            "label": "WP Bottom Printing Speed", 
                            "value": "=wireframe_printspeed", 
                            "minimum_value": "=0.1", 
                            "type": "float", 
                            "children": {}, 
                            "description": "Speed of printing the first layer, which is the only layer touching the build platform. Only applies to Wire Printing.", 
                            "settable_per_meshgroup": "False", 
                            "default_value": "5"
                        }, 
                        "wireframe_printspeed_flat": {
                            "settable_per_mesh": "False", 
                            "maximum_value_warning": "=100", 
                            "maximum_value": "=math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)", 
                            "unit": "mm/s", 
                            "settable_per_extruder": "False", 
                            "enabled": "=wireframe_enabled", 
                            "label": "WP Horizontal Printing Speed", 
                            "value": "=wireframe_printspeed", 
                            "minimum_value": "=0.1", 
                            "type": "float", 
                            "children": {}, 
                            "description": "Speed of printing the horizontal contours of the model. Only applies to Wire Printing.", 
                            "settable_per_meshgroup": "False", 
                            "default_value": "5"
                        }, 
                        "wireframe_printspeed_down": {
                            "settable_per_mesh": "False", 
                            "maximum_value_warning": "=50", 
                            "maximum_value": "=math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2 + max(max_feedrate_z_override, machine_max_feedrate_z) ** 2)", 
                            "unit": "mm/s", 
                            "settable_per_extruder": "False", 
                            "enabled": "=wireframe_enabled", 
                            "label": "WP Downward Printing Speed", 
                            "value": "=wireframe_printspeed", 
                            "minimum_value": "=0.1", 
                            "type": "float", 
                            "children": {}, 
                            "description": "Speed of printing a line diagonally downward. Only applies to Wire Printing.", 
                            "settable_per_meshgroup": "False", 
                            "default_value": "5"
                        }, 
                        "wireframe_printspeed_up": {
                            "settable_per_mesh": "False", 
                            "maximum_value_warning": "=50", 
                            "maximum_value": "=math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2 + max(max_feedrate_z_override, machine_max_feedrate_z) ** 2)", 
                            "unit": "mm/s", 
                            "settable_per_extruder": "False", 
                            "enabled": "=wireframe_enabled", 
                            "label": "WP Upward Printing Speed", 
                            "value": "=wireframe_printspeed", 
                            "minimum_value": "=0.1", 
                            "type": "float", 
                            "children": {}, 
                            "description": "Speed of printing a line upward 'in thin air'. Only applies to Wire Printing.", 
                            "settable_per_meshgroup": "False", 
                            "default_value": "5"
                        }
                    }, 
                    "description": "Speed at which the nozzle moves when extruding material. Only applies to Wire Printing.", 
                    "settable_per_meshgroup": "False", 
                    "default_value": "5"
                }, 
                "wireframe_height": {
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=20", 
                    "unit": "mm", 
                    "settable_per_extruder": "False", 
                    "enabled": "=wireframe_enabled", 
                    "label": "WP Connection Height", 
                    "value": "=machine_nozzle_head_distance", 
                    "minimum_value": "=0.0001", 
                    "type": "float", 
                    "children": {}, 
                    "description": "The height of the upward and diagonally downward lines between two horizontal parts. This determines the overall density of the net structure. Only applies to Wire Printing.", 
                    "settable_per_meshgroup": "False", 
                    "default_value": "3"
                }
            }, 
            "description": "experimental!", 
            "label": "Experimental", 
            "type": "category"
        }, 
        "meshfix": {
            "icon": "category_fixes", 
            "children": {
                "meshfix_union_all": {
                    "settable_per_mesh": "True", 
                    "type": "bool", 
                    "children": {}, 
                    "description": "Ignore the internal geometry arising from overlapping volumes within a mesh and print the volumes as one. This may cause unintended internal cavities to disappear.", 
                    "label": "Union Overlapping Volumes", 
                    "default_value": "True"
                }, 
                "carve_multiple_volumes": {
                    "settable_per_mesh": "False", 
                    "type": "bool", 
                    "children": {}, 
                    "description": "Remove areas where multiple meshes are overlapping with each other. This may be used if merged dual material objects overlap with each other.", 
                    "settable_per_meshgroup": "True", 
                    "label": "Remove Mesh Intersection", 
                    "value": "=machine_extruder_count > 1", 
                    "settable_per_extruder": "False", 
                    "default_value": "True"
                }, 
                "remove_empty_first_layers": {
                    "settable_per_mesh": "False", 
                    "type": "bool", 
                    "children": {}, 
                    "enabled": "=not support_enable", 
                    "label": "Remove Empty First Layers", 
                    "description": "Remove empty layers beneath the first printed layer if they are present. Disabling this setting can cause empty first layers if the Slicing Tolerance setting is set to Exclusive or Middle.", 
                    "settable_per_extruder": "False", 
                    "default_value": "True"
                }, 
                "multiple_mesh_overlap": {
                    "limit_to_extruder": "=wall_0_extruder_nr", 
                    "minimum_value": "=0", 
                    "settable_per_mesh": "True", 
                    "maximum_value_warning": "=1.0", 
                    "type": "float", 
                    "unit": "mm", 
                    "children": {}, 
                    "description": "Make meshes which are touching each other overlap a bit. This makes them bond together better.", 
                    "label": "Merged Meshes Overlap", 
                    "default_value": "0.15"
                }, 
                "alternate_carve_order": {
                    "settable_per_mesh": "False", 
                    "type": "bool", 
                    "children": {}, 
                    "enabled": "=carve_multiple_volumes", 
                    "settable_per_meshgroup": "True", 
                    "label": "Alternate Mesh Removal", 
                    "description": "Switch to which mesh intersecting volumes will belong with every layer, so that the overlapping meshes become interwoven. Turning this setting off will cause one of the meshes to obtain all of the volume in the overlap, while it is removed from the other meshes.", 
                    "settable_per_extruder": "False", 
                    "default_value": "True"
                }, 
                "meshfix_keep_open_polygons": {
                    "settable_per_mesh": "True", 
                    "type": "bool", 
                    "children": {}, 
                    "description": "Normally Cura tries to stitch up small holes in the mesh and remove parts of a layer with big holes. Enabling this option keeps those parts which cannot be stitched. This option should be used as a last resort option when everything else fails to produce proper GCode.", 
                    "label": "Keep Disconnected Faces", 
                    "default_value": "False"
                }, 
                "meshfix_extensive_stitching": {
                    "settable_per_mesh": "True", 
                    "type": "bool", 
                    "children": {}, 
                    "description": "Extensive stitching tries to stitch up open holes in the mesh by closing the hole with touching polygons. This option can introduce a lot of processing time.", 
                    "label": "Extensive Stitching", 
                    "default_value": "False"
                }, 
                "meshfix_union_all_remove_holes": {
                    "settable_per_mesh": "True", 
                    "type": "bool", 
                    "children": {}, 
                    "description": "Remove the holes in each layer and keep only the outside shape. This will ignore any invisible internal geometry. However, it also ignores layer holes which can be viewed from above or below.", 
                    "label": "Remove All Holes", 
                    "default_value": "False"
                }
            }, 
            "description": "category_fixes", 
            "label": "Mesh Fixes", 
            "type": "category"
        }, 
        "support": {
            "icon": "category_support", 
            "children": {
                "support_interface_skip_height": {
                    "limit_to_extruder": "=support_interface_extruder_nr", 
                    "minimum_value": "=0", 
                    "settable_per_mesh": "True", 
                    "maximum_value_warning": "=support_interface_height", 
                    "type": "float", 
                    "unit": "mm", 
                    "children": {}, 
                    "enabled": "=support_interface_enable and support_enable", 
                    "label": "Support Interface Resolution", 
                    "description": "When checking where there's model above and below the support, take steps of the given height. Lower values will slice slower, while higher values may cause normal support to be printed in some places where there should have been support interface.", 
                    "default_value": "0.3"
                }, 
                "support_interface_height": {
                    "settable_per_mesh": "True", 
                    "maximum_value_warning": "=10", 
                    "unit": "mm", 
                    "enabled": "=support_interface_enable and (support_enable or support_tree_enable)", 
                    "label": "Support Interface Thickness", 
                    "minimum_value_warning": "=0.2 + layer_height", 
                    "limit_to_extruder": "=support_interface_extruder_nr", 
                    "minimum_value": "=0", 
                    "type": "float", 
                    "children": {
                        "support_bottom_height": {
                            "settable_per_mesh": "True", 
                            "maximum_value_warning": "=10", 
                            "unit": "mm", 
                            "enabled": "=support_bottom_enable and (support_enable or support_tree_enable)", 
                            "label": "Support Floor Thickness", 
                            "minimum_value": "=0", 
                            "value": "=extruderValue(support_bottom_extruder_nr, 'support_interface_height')", 
                            "limit_to_extruder": "=support_bottom_extruder_nr", 
                            "minimum_value_warning": "=min(0.2 + layer_height, support_bottom_stair_step_height)", 
                            "type": "float", 
                            "children": {}, 
                            "description": "The thickness of the support floors. This controls the number of dense layers that are printed on top of places of a model on which support rests.", 
                            "default_value": "1"
                        }, 
                        "support_roof_height": {
                            "settable_per_mesh": "True", 
                            "maximum_value_warning": "=10", 
                            "unit": "mm", 
                            "enabled": "=support_roof_enable and (support_enable or support_tree_enable)", 
                            "label": "Support Roof Thickness", 
                            "minimum_value": "=0", 
                            "value": "=extruderValue(support_roof_extruder_nr, 'support_interface_height')", 
                            "limit_to_extruder": "=support_roof_extruder_nr", 
                            "minimum_value_warning": "=0.2 + layer_height", 
                            "type": "float", 
                            "children": {}, 
                            "description": "The thickness of the support roofs. This controls the amount of dense layers at the top of the support on which the model rests.", 
                            "default_value": "1"
                        }
                    }, 
                    "description": "The thickness of the interface of the support where it touches with the model on the bottom or the top.", 
                    "default_value": "1"
                }, 
                "support_tower_diameter": {
                    "settable_per_mesh": "True", 
                    "maximum_value_warning": "=20", 
                    "unit": "mm", 
                    "enabled": "=support_enable and support_use_towers", 
                    "label": "Tower Diameter", 
                    "minimum_value_warning": "=2 * machine_nozzle_size", 
                    "limit_to_extruder": "=support_infill_extruder_nr", 
                    "minimum_value": "=0", 
                    "type": "float", 
                    "children": {}, 
                    "description": "The diameter of a special tower.", 
                    "default_value": "3.0"
                }, 
                "support_xy_distance": {
                    "limit_to_extruder": "=support_infill_extruder_nr", 
                    "minimum_value": "=0", 
                    "settable_per_mesh": "True", 
                    "maximum_value_warning": "=1.5 * machine_nozzle_tip_outer_diameter", 
                    "type": "float", 
                    "unit": "mm", 
                    "children": {}, 
                    "enabled": "=support_enable or support_tree_enable", 
                    "label": "Support X/Y Distance", 
                    "description": "Distance of the support structure from the print in the X/Y directions.", 
                    "default_value": "0.7"
                }, 
                "support_pattern": {
                    "limit_to_extruder": "=support_infill_extruder_nr", 
                    "settable_per_mesh": "False", 
                    "type": "enum", 
                    "options": "OrderedDict([('lines', 'Lines'), ('grid', 'Grid'), ('triangles', 'Triangles'), ('concentric', 'Concentric'), ('concentric_3d', 'Concentric 3D'), ('zigzag', 'Zig Zag'), ('cross', 'Cross')])", 
                    "children": {}, 
                    "enabled": "=support_enable or support_tree_enable", 
                    "label": "Support Pattern", 
                    "description": "The pattern of the support structures of the print. The different options available result in sturdy or easy to remove support.", 
                    "settable_per_extruder": "True", 
                    "default_value": "zigzag"
                }, 
                "support_enable": {
                    "settable_per_mesh": "True", 
                    "type": "bool", 
                    "children": {}, 
                    "description": "Generate structures to support parts of the model which have overhangs. Without these structures, such parts would collapse during printing.", 
                    "label": "Generate Support", 
                    "default_value": "False", 
                    "settable_per_extruder": "False"
                }, 
                "support_xy_overrides_z": {
                    "limit_to_extruder": "=support_infill_extruder_nr", 
                    "settable_per_mesh": "True", 
                    "type": "enum", 
                    "options": "OrderedDict([('xy_overrides_z', 'X/Y overrides Z'), ('z_overrides_xy', 'Z overrides X/Y')])", 
                    "children": {}, 
                    "enabled": "=support_enable", 
                    "label": "Support Distance Priority", 
                    "description": "Whether the Support X/Y Distance overrides the Support Z Distance or vice versa. When X/Y overrides Z the X/Y distance can push away the support from the model, influencing the actual Z distance to the overhang. We can disable this by not applying the X/Y distance around overhangs.", 
                    "default_value": "z_overrides_xy"
                }, 
                "support_tower_roof_angle": {
                    "limit_to_extruder": "=support_infill_extruder_nr", 
                    "minimum_value": "=0", 
                    "settable_per_mesh": "True", 
                    "type": "int", 
                    "unit": "\u00b0", 
                    "children": {}, 
                    "enabled": "=support_enable and support_use_towers", 
                    "maximum_value": "=90", 
                    "label": "Tower Roof Angle", 
                    "description": "The angle of a rooftop of a tower. A higher value results in pointed tower roofs, a lower value results in flattened tower roofs.", 
                    "default_value": "65"
                }, 
                "support_minimal_diameter": {
                    "settable_per_mesh": "True", 
                    "maximum_value_warning": "=20", 
                    "maximum_value": "=support_tower_diameter", 
                    "unit": "mm", 
                    "enabled": "=support_enable and support_use_towers", 
                    "label": "Minimum Diameter", 
                    "minimum_value": "=0", 
                    "limit_to_extruder": "=support_infill_extruder_nr", 
                    "minimum_value_warning": "=2 * machine_nozzle_size", 
                    "type": "float", 
                    "children": {}, 
                    "description": "Minimum diameter in the X/Y directions of a small area which is to be supported by a specialized support tower.", 
                    "default_value": "3.0"
                }, 
                "support_type": {
                    "resolve": "='everywhere' if 'everywhere' in extruderValues('support_type') else 'buildplate'", 
                    "settable_per_mesh": "False", 
                    "type": "enum", 
                    "options": "OrderedDict([('buildplate', 'Touching Buildplate'), ('everywhere', 'Everywhere')])", 
                    "children": {}, 
                    "enabled": "=support_enable or support_tree_enable", 
                    "label": "Support Placement", 
                    "description": "Adjusts the placement of the support structures. The placement can be set to touching build plate or everywhere. When set to everywhere the support structures will also be printed on the model.", 
                    "settable_per_extruder": "False", 
                    "default_value": "everywhere"
                }, 
                "gradual_support_infill_step_height": {
                    "limit_to_extruder": "=support_infill_extruder_nr", 
                    "minimum_value": "=0.0001", 
                    "settable_per_mesh": "False", 
                    "type": "float", 
                    "unit": "mm", 
                    "children": {}, 
                    "description": "The height of support infill of a given density before switching to half the density.", 
                    "default_value": "1", 
                    "label": "Gradual Support Infill Step Height", 
                    "enabled": "=(support_enable or support_tree_enable) and support_infill_rate > 0 and gradual_support_infill_steps > 0", 
                    "minimum_value_warning": "=3 * resolveOrValue('layer_height')"
                }, 
                "support_infill_rate": {
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=100", 
                    "unit": "%", 
                    "settable_per_extruder": "True", 
                    "enabled": "=support_enable or support_tree_enable", 
                    "label": "Support Density", 
                    "value": "=15 if support_enable else 0 if support_tree_enable else 15", 
                    "limit_to_extruder": "=support_infill_extruder_nr", 
                    "minimum_value": "=0", 
                    "type": "float", 
                    "children": {
                        "support_line_distance": {
                            "settable_per_mesh": "False", 
                            "unit": "mm", 
                            "settable_per_extruder": "True", 
                            "enabled": "=support_enable or support_tree_enable", 
                            "label": "Support Line Distance", 
                            "minimum_value": "=0", 
                            "value": "=0 if support_infill_rate == 0 else (support_line_width * 100) / support_infill_rate * (2 if support_pattern == 'grid' else (3 if support_pattern == 'triangles' else 1))", 
                            "limit_to_extruder": "=support_infill_extruder_nr", 
                            "minimum_value_warning": "=support_line_width", 
                            "type": "float", 
                            "children": {}, 
                            "description": "Distance between the printed support structure lines. This setting is calculated by the support density.", 
                            "default_value": "2.66"
                        }
                    }, 
                    "description": "Adjusts the density of the support structure. A higher value results in better overhangs, but the supports are harder to remove.", 
                    "default_value": "15"
                }, 
                "support_interface_pattern": {
                    "limit_to_extruder": "=support_interface_extruder_nr", 
                    "settable_per_mesh": "False", 
                    "type": "enum", 
                    "options": "OrderedDict([('lines', 'Lines'), ('grid', 'Grid'), ('triangles', 'Triangles'), ('concentric', 'Concentric'), ('concentric_3d', 'Concentric 3D'), ('zigzag', 'Zig Zag')])", 
                    "children": {
                        "support_roof_pattern": {
                            "limit_to_extruder": "=support_roof_extruder_nr", 
                            "settable_per_mesh": "False", 
                            "type": "enum", 
                            "options": "OrderedDict([('lines', 'Lines'), ('grid', 'Grid'), ('triangles', 'Triangles'), ('concentric', 'Concentric'), ('concentric_3d', 'Concentric 3D'), ('zigzag', 'Zig Zag')])", 
                            "children": {}, 
                            "description": "The pattern with which the roofs of the support are printed.", 
                            "default_value": "concentric", 
                            "label": "Support Roof Pattern", 
                            "enabled": "=support_roof_enable and (support_enable or support_tree_enable)", 
                            "settable_per_extruder": "True", 
                            "value": "=extruderValue(support_roof_extruder_nr, 'support_interface_pattern')"
                        }, 
                        "support_bottom_pattern": {
                            "limit_to_extruder": "=support_bottom_extruder_nr", 
                            "settable_per_mesh": "False", 
                            "type": "enum", 
                            "options": "OrderedDict([('lines', 'Lines'), ('grid', 'Grid'), ('triangles', 'Triangles'), ('concentric', 'Concentric'), ('concentric_3d', 'Concentric 3D'), ('zigzag', 'Zig Zag')])", 
                            "children": {}, 
                            "description": "The pattern with which the floors of the support are printed.", 
                            "default_value": "concentric", 
                            "label": "Support Floor Pattern", 
                            "enabled": "=support_bottom_enable and (support_enable or support_tree_enable)", 
                            "settable_per_extruder": "True", 
                            "value": "=extruderValue(support_bottom_extruder_nr, 'support_interface_pattern')"
                        }
                    }, 
                    "enabled": "=support_interface_enable and (support_enable or support_tree_enable)", 
                    "label": "Support Interface Pattern", 
                    "description": "The pattern with which the interface of the support with the model is printed.", 
                    "settable_per_extruder": "True", 
                    "default_value": "concentric"
                }, 
                "gradual_support_infill_steps": {
                    "limit_to_extruder": "=support_infill_extruder_nr", 
                    "minimum_value": "=0", 
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=1 if (support_pattern == 'cross' or support_pattern == 'lines' or support_pattern == 'zigzag' or support_pattern == 'concentric' or support_pattern == 'concentric_3d') else 5", 
                    "maximum_value": "=999999 if support_line_distance == 0 else (20 - math.log(support_line_distance) / math.log(2))", 
                    "children": {}, 
                    "enabled": "=(support_enable or support_tree_enable) and support_infill_rate > 0", 
                    "type": "int", 
                    "label": "Gradual Support Infill Steps", 
                    "description": "Number of times to reduce the support infill density by half when getting further below top surfaces. Areas which are closer to top surfaces get a higher density, up to the Support Infill Density.", 
                    "default_value": "0"
                }, 
                "support_infill_sparse_thickness": {
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=0.75 * machine_nozzle_size", 
                    "maximum_value": "=resolveOrValue('layer_height') * 8", 
                    "unit": "mm", 
                    "enabled": "=(support_enable or support_tree_enable) and support_infill_rate > 0", 
                    "label": "Support Infill Layer Thickness", 
                    "value": "=resolveOrValue('layer_height')", 
                    "limit_to_extruder": "=support_infill_extruder_nr", 
                    "minimum_value": "=resolveOrValue('layer_height')", 
                    "type": "float", 
                    "children": {}, 
                    "description": "The thickness per layer of support infill material. This value should always be a multiple of the layer height and is otherwise rounded.", 
                    "default_value": "0.1"
                }, 
                "support_extruder_nr": {
                    "settable_per_mesh": "False", 
                    "type": "extruder", 
                    "children": {
                        "support_interface_extruder_nr": {
                            "default_value": "0", 
                            "settable_per_mesh": "False", 
                            "type": "extruder", 
                            "children": {
                                "support_roof_extruder_nr": {
                                    "default_value": "0", 
                                    "settable_per_mesh": "False", 
                                    "type": "extruder", 
                                    "children": {}, 
                                    "description": "The extruder train to use for printing the roofs of the support. This is used in multi-extrusion.", 
                                    "label": "Support Roof Extruder", 
                                    "enabled": "=(support_enable or support_tree_enable) and machine_extruder_count > 1", 
                                    "settable_per_extruder": "False", 
                                    "value": "=support_interface_extruder_nr"
                                }, 
                                "support_bottom_extruder_nr": {
                                    "default_value": "0", 
                                    "settable_per_mesh": "False", 
                                    "type": "extruder", 
                                    "children": {}, 
                                    "description": "The extruder train to use for printing the floors of the support. This is used in multi-extrusion.", 
                                    "label": "Support Floor Extruder", 
                                    "enabled": "=(support_enable or support_tree_enable) and machine_extruder_count > 1", 
                                    "settable_per_extruder": "False", 
                                    "value": "=support_interface_extruder_nr"
                                }
                            }, 
                            "description": "The extruder train to use for printing the roofs and floors of the support. This is used in multi-extrusion.", 
                            "label": "Support Interface Extruder", 
                            "enabled": "=(support_enable or support_tree_enable) and machine_extruder_count > 1", 
                            "settable_per_extruder": "False", 
                            "value": "=support_extruder_nr"
                        }, 
                        "support_infill_extruder_nr": {
                            "default_value": "0", 
                            "settable_per_mesh": "False", 
                            "type": "extruder", 
                            "children": {}, 
                            "description": "The extruder train to use for printing the infill of the support. This is used in multi-extrusion.", 
                            "label": "Support Infill Extruder", 
                            "enabled": "=(support_enable or support_tree_enable) and machine_extruder_count > 1", 
                            "settable_per_extruder": "False", 
                            "value": "=support_extruder_nr"
                        }, 
                        "support_extruder_nr_layer_0": {
                            "default_value": "0", 
                            "settable_per_mesh": "False", 
                            "type": "extruder", 
                            "children": {}, 
                            "description": "The extruder train to use for printing the first layer of support infill. This is used in multi-extrusion.", 
                            "label": "First Layer Support Extruder", 
                            "enabled": "=(support_enable or support_tree_enable) and machine_extruder_count > 1", 
                            "settable_per_extruder": "False", 
                            "value": "=support_extruder_nr"
                        }
                    }, 
                    "enabled": "=(support_enable or support_tree_enable) and machine_extruder_count > 1", 
                    "label": "Support Extruder", 
                    "description": "The extruder train to use for printing the support. This is used in multi-extrusion.", 
                    "settable_per_extruder": "False", 
                    "default_value": "0"
                }, 
                "support_z_distance": {
                    "limit_to_extruder": "=support_interface_extruder_nr if support_interface_enable else support_infill_extruder_nr", 
                    "minimum_value": "=0", 
                    "settable_per_mesh": "True", 
                    "maximum_value_warning": "=machine_nozzle_size", 
                    "type": "float", 
                    "unit": "mm", 
                    "children": {
                        "support_top_distance": {
                            "settable_per_mesh": "True", 
                            "maximum_value_warning": "=machine_nozzle_size", 
                            "unit": "mm", 
                            "enabled": "=support_enable or support_tree_enable", 
                            "label": "Support Top Distance", 
                            "value": "=extruderValue(support_roof_extruder_nr if support_roof_enable else support_infill_extruder_nr, 'support_z_distance')", 
                            "limit_to_extruder": "=support_roof_extruder_nr if support_roof_enable else support_infill_extruder_nr", 
                            "minimum_value": "=0", 
                            "type": "float", 
                            "children": {}, 
                            "description": "Distance from the top of the support to the print.", 
                            "default_value": "0.1"
                        }, 
                        "support_bottom_distance": {
                            "settable_per_mesh": "True", 
                            "maximum_value_warning": "=machine_nozzle_size", 
                            "unit": "mm", 
                            "enabled": "=(support_enable or support_tree_enable) and resolveOrValue('support_type') == 'everywhere'", 
                            "label": "Support Bottom Distance", 
                            "value": "=extruderValue(support_bottom_extruder_nr if support_bottom_enable else support_infill_extruder_nr, 'support_z_distance') if support_type == 'everywhere' else 0", 
                            "limit_to_extruder": "=support_bottom_extruder_nr if support_bottom_enable else support_infill_extruder_nr", 
                            "minimum_value": "=0", 
                            "type": "float", 
                            "children": {}, 
                            "description": "Distance from the print to the bottom of the support.", 
                            "default_value": "0.1"
                        }
                    }, 
                    "enabled": "=support_enable or support_tree_enable", 
                    "label": "Support Z Distance", 
                    "description": "Distance from the top/bottom of the support structure to the print. This gap provides clearance to remove the supports after the model is printed. This value is rounded up to a multiple of the layer height.", 
                    "default_value": "0.1"
                }, 
                "support_interface_density": {
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=100", 
                    "unit": "%", 
                    "settable_per_extruder": "True", 
                    "enabled": "=support_interface_enable and (support_enable or support_tree_enable)", 
                    "label": "Support Interface Density", 
                    "limit_to_extruder": "=support_interface_extruder_nr", 
                    "minimum_value": "=0", 
                    "type": "float", 
                    "children": {
                        "support_roof_density": {
                            "settable_per_mesh": "False", 
                            "maximum_value": "=100", 
                            "unit": "%", 
                            "settable_per_extruder": "True", 
                            "enabled": "=support_roof_enable and (support_enable or support_tree_enable)", 
                            "label": "Support Roof Density", 
                            "value": "=extruderValue(support_roof_extruder_nr, 'support_interface_density')", 
                            "limit_to_extruder": "=support_roof_extruder_nr", 
                            "minimum_value": "=0", 
                            "type": "float", 
                            "children": {
                                "support_roof_line_distance": {
                                    "settable_per_mesh": "False", 
                                    "unit": "mm", 
                                    "settable_per_extruder": "True", 
                                    "enabled": "=support_roof_enable and (support_enable or support_tree_enable)", 
                                    "label": "Support Roof Line Distance", 
                                    "minimum_value": "=0", 
                                    "value": "=0 if support_roof_density == 0 else (support_roof_line_width * 100) / support_roof_density * (2 if support_roof_pattern == 'grid' else (3 if support_roof_pattern == 'triangles' else 1))", 
                                    "limit_to_extruder": "=support_roof_extruder_nr", 
                                    "minimum_value_warning": "=support_roof_line_width - 0.0001", 
                                    "type": "float", 
                                    "children": {}, 
                                    "description": "Distance between the printed support roof lines. This setting is calculated by the Support Roof Density, but can be adjusted separately.", 
                                    "default_value": "0.4"
                                }
                            }, 
                            "description": "The density of the roofs of the support structure. A higher value results in better overhangs, but the supports are harder to remove.", 
                            "default_value": "100"
                        }, 
                        "support_bottom_density": {
                            "settable_per_mesh": "False", 
                            "maximum_value": "=100", 
                            "unit": "%", 
                            "settable_per_extruder": "True", 
                            "enabled": "=support_bottom_enable and (support_enable or support_tree_enable)", 
                            "label": "Support Floor Density", 
                            "value": "=extruderValue(support_bottom_extruder_nr, 'support_interface_density')", 
                            "limit_to_extruder": "=support_bottom_extruder_nr", 
                            "minimum_value": "=0", 
                            "type": "float", 
                            "children": {
                                "support_bottom_line_distance": {
                                    "settable_per_mesh": "False", 
                                    "unit": "mm", 
                                    "settable_per_extruder": "True", 
                                    "enabled": "=support_bottom_enable and (support_enable or support_tree_enable)", 
                                    "label": "Support Floor Line Distance", 
                                    "minimum_value": "=0", 
                                    "value": "=0 if support_bottom_density == 0 else (support_bottom_line_width * 100) / support_bottom_density * (2 if support_bottom_pattern == 'grid' else (3 if support_bottom_pattern == 'triangles' else 1))", 
                                    "limit_to_extruder": "=support_bottom_extruder_nr", 
                                    "minimum_value_warning": "=support_bottom_line_width - 0.0001", 
                                    "type": "float", 
                                    "children": {}, 
                                    "description": "Distance between the printed support floor lines. This setting is calculated by the Support Floor Density, but can be adjusted separately.", 
                                    "default_value": "0.4"
                                }
                            }, 
                            "description": "The density of the floors of the support structure. A higher value results in better adhesion of the support on top of the model.", 
                            "default_value": "100"
                        }
                    }, 
                    "description": "Adjusts the density of the roofs and floors of the support structure. A higher value results in better overhangs, but the supports are harder to remove.", 
                    "default_value": "100"
                }, 
                "support_angle": {
                    "settable_per_mesh": "True", 
                    "maximum_value_warning": "=80", 
                    "maximum_value": "=90", 
                    "unit": "\u00b0", 
                    "enabled": "=support_enable or support_tree_enable", 
                    "label": "Support Overhang Angle", 
                    "limit_to_extruder": "=support_roof_extruder_nr if support_roof_enable else support_infill_extruder_nr", 
                    "minimum_value": "=0", 
                    "type": "float", 
                    "children": {}, 
                    "description": "The minimum angle of overhangs for which support is added. At a value of 0\u00b0 all overhangs are supported, 90\u00b0 will not provide any support.", 
                    "default_value": "50"
                }, 
                "support_connect_zigzags": {
                    "limit_to_extruder": "=support_infill_extruder_nr", 
                    "settable_per_mesh": "False", 
                    "type": "bool", 
                    "children": {}, 
                    "enabled": "=(support_enable or support_tree_enable) and support_pattern == 'zigzag'", 
                    "label": "Connect Support ZigZags", 
                    "description": "Connect the ZigZags. This will increase the strength of the zig zag support structure.", 
                    "settable_per_extruder": "True", 
                    "default_value": "True"
                }, 
                "support_mesh_drop_down": {
                    "settable_per_mesh": "True", 
                    "settable_globally": "False", 
                    "type": "bool", 
                    "children": {}, 
                    "enabled": "=support_mesh", 
                    "settable_per_meshgroup": "False", 
                    "label": "Drop Down Support Mesh", 
                    "description": "Make support everywhere below the support mesh, so that there's no overhang in the support mesh.", 
                    "settable_per_extruder": "False", 
                    "default_value": "True"
                }, 
                "support_interface_enable": {
                    "limit_to_extruder": "=support_interface_extruder_nr", 
                    "settable_per_mesh": "True", 
                    "type": "bool", 
                    "children": {
                        "support_bottom_enable": {
                            "limit_to_extruder": "=support_bottom_extruder_nr", 
                            "settable_per_mesh": "True", 
                            "type": "bool", 
                            "default_value": "False", 
                            "children": {}, 
                            "description": "Generate a dense slab of material between the bottom of the support and the model. This will create a skin between the model and support.", 
                            "label": "Enable Support Floor", 
                            "enabled": "=support_enable or support_tree_enable", 
                            "value": "=extruderValue(support_bottom_extruder_nr, 'support_interface_enable')"
                        }, 
                        "support_roof_enable": {
                            "limit_to_extruder": "=support_roof_extruder_nr", 
                            "settable_per_mesh": "True", 
                            "type": "bool", 
                            "default_value": "False", 
                            "children": {}, 
                            "description": "Generate a dense slab of material between the top of support and the model. This will create a skin between the model and support.", 
                            "label": "Enable Support Roof", 
                            "enabled": "=support_enable or support_tree_enable", 
                            "value": "=extruderValue(support_roof_extruder_nr, 'support_interface_enable')"
                        }
                    }, 
                    "enabled": "=support_enable or support_tree_enable", 
                    "label": "Enable Support Interface", 
                    "description": "Generate a dense interface between the model and the support. This will create a skin at the top of the support on which the model is printed and at the bottom of the support, where it rests on the model.", 
                    "default_value": "False"
                }, 
                "support_xy_distance_overhang": {
                    "settable_per_mesh": "True", 
                    "maximum_value_warning": "=support_xy_distance", 
                    "unit": "mm", 
                    "enabled": "=support_enable and support_xy_overrides_z == 'z_overrides_xy'", 
                    "label": "Minimum Support X/Y Distance", 
                    "value": "=machine_nozzle_size / 2", 
                    "limit_to_extruder": "=support_infill_extruder_nr", 
                    "minimum_value": "=0", 
                    "type": "float", 
                    "children": {}, 
                    "description": "Distance of the support structure from the overhang in the X/Y directions. ", 
                    "default_value": "0.2"
                }, 
                "support_join_distance": {
                    "limit_to_extruder": "=support_infill_extruder_nr", 
                    "minimum_value_warning": "=0", 
                    "settable_per_mesh": "True", 
                    "maximum_value_warning": "=10", 
                    "type": "float", 
                    "unit": "mm", 
                    "children": {}, 
                    "enabled": "=support_enable", 
                    "label": "Support Join Distance", 
                    "description": "The maximum distance between support structures in the X/Y directions. When seperate structures are closer together than this value, the structures merge into one.", 
                    "default_value": "2.0"
                }, 
                "support_offset": {
                    "limit_to_extruder": "=support_infill_extruder_nr", 
                    "minimum_value_warning": "=-1 * machine_nozzle_size", 
                    "settable_per_mesh": "True", 
                    "maximum_value_warning": "=10 * machine_nozzle_size", 
                    "type": "float", 
                    "unit": "mm", 
                    "children": {}, 
                    "enabled": "=support_enable", 
                    "label": "Support Horizontal Expansion", 
                    "description": "Amount of offset applied to all support polygons in each layer. Positive values can smooth out the support areas and result in more sturdy support.", 
                    "default_value": "0.2"
                }, 
                "support_bottom_stair_step_height": {
                    "limit_to_extruder": "=support_bottom_extruder_nr if support_bottom_enable else support_infill_extruder_nr", 
                    "minimum_value": "=0", 
                    "settable_per_mesh": "True", 
                    "maximum_value_warning": "=1.0", 
                    "type": "float", 
                    "unit": "mm", 
                    "children": {}, 
                    "enabled": "=support_enable", 
                    "label": "Support Stair Step Height", 
                    "description": "The height of the steps of the stair-like bottom of support resting on the model. A low value makes the support harder to remove, but too high values can lead to unstable support structures. Set to zero to turn off the stair-like behaviour.", 
                    "default_value": "0.3"
                }, 
                "support_bottom_stair_step_width": {
                    "limit_to_extruder": "=support_interface_extruder_nr if support_interface_enable else support_infill_extruder_nr", 
                    "minimum_value": "=0", 
                    "settable_per_mesh": "True", 
                    "maximum_value_warning": "=10.0", 
                    "type": "float", 
                    "unit": "mm", 
                    "children": {}, 
                    "enabled": "=support_enable", 
                    "label": "Support Stair Step Maximum Width", 
                    "description": "The maximum width of the steps of the stair-like bottom of support resting on the model. A low value makes the support harder to remove, but too high values can lead to unstable support structures.", 
                    "default_value": "5.0"
                }, 
                "support_use_towers": {
                    "limit_to_extruder": "=support_infill_extruder_nr", 
                    "settable_per_mesh": "True", 
                    "type": "bool", 
                    "children": {}, 
                    "enabled": "=support_enable", 
                    "label": "Use Towers", 
                    "description": "Use specialized towers to support tiny overhang areas. These towers have a larger diameter than the region they support. Near the overhang the towers' diameter decreases, forming a roof.", 
                    "default_value": "True"
                }
            }, 
            "description": "Support", 
            "label": "Support", 
            "type": "category"
        }, 
        "material": {
            "icon": "category_material", 
            "children": {
                "material_print_temperature": {
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=295", 
                    "unit": "\u00b0C", 
                    "settable_per_extruder": "True", 
                    "enabled": "=True", 
                    "label": "Printing Temperature", 
                    "minimum_value": "=0", 
                    "value": "=default_material_print_temperature", 
                    "minimum_value_warning": "=0", 
                    "type": "float", 
                    "children": {
                        "material_soften_temperature": {
                            "settable_per_mesh": "False", 
                            "maximum_value_warning": "=295", 
                            "maximum_value": "=300", 
                            "unit": "\u00b0C", 
                            "settable_per_extruder": "True", 
                            "enabled": "=True", 
                            "label": "Soften Temperature", 
                            "minimum_value": "=0", 
                            "type": "float", 
                            "children": {}, 
                            "description": "The nozzle temperature used before z-axis homing.", 
                            "default_value": "170"
                        }, 
                        "material_wipe_temperature": {
                            "settable_per_mesh": "False", 
                            "maximum_value_warning": "=195", 
                            "maximum_value": "=200", 
                            "unit": "\u00b0C", 
                            "settable_per_extruder": "True", 
                            "enabled": "=True", 
                            "label": "Wipe Temperature", 
                            "minimum_value": "=0", 
                            "type": "float", 
                            "children": {}, 
                            "description": "The nozzle temperature used before nozzle wiping.", 
                            "default_value": "160"
                        }, 
                        "material_probe_temperature": {
                            "settable_per_mesh": "False", 
                            "maximum_value_warning": "=295", 
                            "maximum_value": "=300", 
                            "unit": "\u00b0C", 
                            "settable_per_extruder": "True", 
                            "enabled": "=True", 
                            "label": "Probe Temperature", 
                            "minimum_value": "=0", 
                            "type": "float", 
                            "children": {}, 
                            "description": "The nozzle temperature used before probing.", 
                            "default_value": "160"
                        }
                    }, 
                    "description": "The temperature used for printing. Set at 0 to pre-heat the printer manually.", 
                    "default_value": "210"
                }, 
                "retraction_amount": {
                    "minimum_value_warning": "=-0.0001", 
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=10.0", 
                    "type": "float", 
                    "unit": "mm", 
                    "children": {}, 
                    "enabled": "=retraction_enable and machine_gcode_flavor != \"UltiGCode\"", 
                    "label": "Retraction Distance", 
                    "description": "The length of material retracted during a retraction move.", 
                    "settable_per_extruder": "True", 
                    "default_value": "6.5"
                }, 
                "material_bed_temperature_layer_0": {
                    "resolve": "=max(extruderValues('material_bed_temperature_layer_0'))", 
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=130", 
                    "unit": "\u00b0C", 
                    "settable_per_extruder": "False", 
                    "enabled": "=machine_heated_bed and machine_gcode_flavor != \"UltiGCode\"", 
                    "label": "Build Plate Temperature Initial Layer", 
                    "minimum_value": "=-273.15", 
                    "value": "=resolveOrValue('material_bed_temperature')", 
                    "minimum_value_warning": "=max(extruderValues('material_bed_temperature'))", 
                    "type": "float", 
                    "children": {}, 
                    "description": "The temperature used for the heated build plate at the first layer.", 
                    "settable_per_meshgroup": "False", 
                    "default_value": "60"
                }, 
                "retraction_speed": {
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=70", 
                    "maximum_value": "=machine_max_feedrate_e", 
                    "unit": "mm/s", 
                    "settable_per_extruder": "True", 
                    "enabled": "=retraction_enable and machine_gcode_flavor != \"UltiGCode\"", 
                    "label": "Retraction Speed", 
                    "minimum_value": "=0.0001", 
                    "minimum_value_warning": "=1", 
                    "type": "float", 
                    "children": {
                        "retraction_retract_speed": {
                            "settable_per_mesh": "False", 
                            "maximum_value_warning": "=70", 
                            "maximum_value": "=machine_max_feedrate_e", 
                            "unit": "mm/s", 
                            "settable_per_extruder": "True", 
                            "enabled": "=retraction_enable and machine_gcode_flavor != \"UltiGCode\"", 
                            "label": "Retraction Retract Speed", 
                            "minimum_value_warning": "=1", 
                            "value": "=retraction_speed", 
                            "minimum_value": "=0.0001", 
                            "type": "float", 
                            "children": {}, 
                            "description": "The speed at which the filament is retracted during a retraction move.", 
                            "default_value": "25"
                        }, 
                        "retraction_prime_speed": {
                            "settable_per_mesh": "False", 
                            "maximum_value_warning": "=70", 
                            "maximum_value": "=machine_max_feedrate_e", 
                            "unit": "mm/s", 
                            "settable_per_extruder": "True", 
                            "enabled": "=retraction_enable and machine_gcode_flavor != \"UltiGCode\"", 
                            "label": "Retraction Prime Speed", 
                            "minimum_value_warning": "=1", 
                            "value": "=retraction_speed", 
                            "minimum_value": "=0.0001", 
                            "type": "float", 
                            "children": {}, 
                            "description": "The speed at which the filament is primed during a retraction move.", 
                            "default_value": "25"
                        }
                    }, 
                    "description": "The speed at which the filament is retracted and primed during a retraction move.", 
                    "default_value": "25"
                }, 
                "material_extrusion_cool_down_speed": {
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=10.0", 
                    "maximum_value": "=machine_nozzle_heat_up_speed", 
                    "unit": "\u00b0C/s", 
                    "settable_per_extruder": "True", 
                    "enabled": "=material_flow_dependent_temperature or (machine_extruder_count > 1 and material_final_print_temperature != material_print_temperature)", 
                    "label": "Extrusion Cool Down Speed Modifier", 
                    "minimum_value": "=0", 
                    "type": "float", 
                    "children": {}, 
                    "description": "The extra speed by which the nozzle cools while extruding. The same value is used to signify the heat up speed lost when heating up while extruding.", 
                    "default_value": "0.7"
                }, 
                "material_initial_print_temperature": {
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=material_print_temperature", 
                    "unit": "\u00b0C", 
                    "settable_per_extruder": "True", 
                    "enabled": "=machine_nozzle_temp_enabled", 
                    "label": "Initial Printing Temperature", 
                    "minimum_value": "=-273.15", 
                    "value": "=max(-273.15, material_print_temperature - 10)", 
                    "minimum_value_warning": "=material_standby_temperature", 
                    "type": "float", 
                    "children": {}, 
                    "description": "The minimal temperature while heating up to the Printing Temperature at which printing can already start.", 
                    "default_value": "200"
                }, 
                "switch_extruder_retraction_speeds": {
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=70", 
                    "maximum_value": "=machine_max_feedrate_e", 
                    "unit": "mm/s", 
                    "settable_per_extruder": "True", 
                    "enabled": "=retraction_enable", 
                    "label": "Nozzle Switch Retraction Speed", 
                    "minimum_value": "=0.1", 
                    "minimum_value_warning": "=1", 
                    "type": "float", 
                    "children": {
                        "switch_extruder_prime_speed": {
                            "settable_per_mesh": "False", 
                            "maximum_value_warning": "=70", 
                            "maximum_value": "=machine_max_feedrate_e", 
                            "unit": "mm/s", 
                            "settable_per_extruder": "True", 
                            "enabled": "=retraction_enable", 
                            "label": "Nozzle Switch Prime Speed", 
                            "minimum_value_warning": "=1", 
                            "value": "=switch_extruder_retraction_speeds", 
                            "minimum_value": "=0.1", 
                            "type": "float", 
                            "children": {}, 
                            "description": "The speed at which the filament is pushed back after a nozzle switch retraction.", 
                            "default_value": "20"
                        }, 
                        "switch_extruder_retraction_speed": {
                            "settable_per_mesh": "False", 
                            "maximum_value_warning": "=70", 
                            "maximum_value": "=machine_max_feedrate_e", 
                            "unit": "mm/s", 
                            "settable_per_extruder": "True", 
                            "enabled": "=retraction_enable", 
                            "label": "Nozzle Switch Retract Speed", 
                            "minimum_value_warning": "=1", 
                            "value": "=switch_extruder_retraction_speeds", 
                            "minimum_value": "=0.1", 
                            "type": "float", 
                            "children": {}, 
                            "description": "The speed at which the filament is retracted during a nozzle switch retract.", 
                            "default_value": "20"
                        }
                    }, 
                    "description": "The speed at which the filament is retracted. A higher retraction speed works better, but a very high retraction speed can lead to filament grinding.", 
                    "default_value": "20"
                }, 
                "retract_at_layer_change": {
                    "settable_per_mesh": "False", 
                    "type": "bool", 
                    "children": {}, 
                    "description": "Retract the filament when the nozzle is moving to the next layer.", 
                    "label": "Retract at Layer Change", 
                    "default_value": "False", 
                    "settable_per_extruder": "True"
                }, 
                "retraction_min_travel": {
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=10", 
                    "unit": "mm", 
                    "settable_per_extruder": "True", 
                    "enabled": "=retraction_enable", 
                    "label": "Retraction Minimum Travel", 
                    "value": "=line_width * 2", 
                    "minimum_value": "=0", 
                    "type": "float", 
                    "children": {}, 
                    "description": "The minimum distance of travel needed for a retraction to happen at all. This helps to get fewer retractions in a small area.", 
                    "default_value": "1.5"
                }, 
                "material_surface_energy": {
                    "minimum_value": "=0", 
                    "settable_per_mesh": "False", 
                    "type": "int", 
                    "unit": "%", 
                    "children": {}, 
                    "enabled": "=False", 
                    "maximum_value": "=100", 
                    "label": "Surface Energy", 
                    "description": "Surface energy.", 
                    "settable_per_extruder": "True", 
                    "default_value": "100"
                }, 
                "retraction_extra_prime_amount": {
                    "minimum_value_warning": "=-0.0001", 
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=5.0", 
                    "type": "float", 
                    "unit": "mm\u00b3", 
                    "children": {}, 
                    "enabled": "=retraction_enable", 
                    "label": "Retraction Extra Prime Amount", 
                    "description": "Some material can ooze away during a travel move, which can be compensated for here.", 
                    "settable_per_extruder": "True", 
                    "default_value": "0"
                }, 
                "retraction_extrusion_window": {
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=retraction_amount * 2", 
                    "unit": "mm", 
                    "settable_per_extruder": "True", 
                    "enabled": "=retraction_enable", 
                    "label": "Minimum Extrusion Distance Window", 
                    "value": "=retraction_amount", 
                    "minimum_value": "=0", 
                    "type": "float", 
                    "children": {}, 
                    "description": "The window in which the maximum retraction count is enforced. This value should be approximately the same as the retraction distance, so that effectively the number of times a retraction passes the same patch of material is limited.", 
                    "default_value": "4.5"
                }, 
                "material_adhesion_tendency": {
                    "minimum_value": "=0", 
                    "settable_per_mesh": "False", 
                    "maximum_value": "=10", 
                    "children": {}, 
                    "enabled": "=False", 
                    "type": "int", 
                    "label": "Adhesion Tendency", 
                    "description": "Surface adhesion tendency.", 
                    "settable_per_extruder": "True", 
                    "default_value": "10"
                }, 
                "material_print_temperature_layer_0": {
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=260", 
                    "unit": "\u00b0C", 
                    "settable_per_extruder": "True", 
                    "enabled": "=machine_gcode_flavor != \"UltiGCode\"", 
                    "label": "Printing Temperature Initial Layer", 
                    "minimum_value": "=-273.15", 
                    "value": "=material_print_temperature + 5", 
                    "minimum_value_warning": "=0", 
                    "type": "float", 
                    "children": {}, 
                    "description": "The temperature used for printing the first layer. Set at 0 to disable special handling of the initial layer.", 
                    "default_value": "215"
                }, 
                "material_bed_temperature": {
                    "resolve": "=max(extruderValues('material_bed_temperature'))", 
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=260", 
                    "unit": "\u00b0C", 
                    "settable_per_extruder": "False", 
                    "enabled": "=machine_heated_bed and machine_gcode_flavor != \"UltiGCode\"", 
                    "label": "Build Plate Temperature", 
                    "minimum_value": "=-273.15", 
                    "minimum_value_warning": "=0", 
                    "type": "float", 
                    "children": {
                        "material_part_removal_temperature": {
                            "resolve": "=sum(extruderValues('material_part_removal_temperature')) / len(extruderValues('material_part_removal_temperature'))", 
                            "settable_per_mesh": "False", 
                            "maximum_value": "=110", 
                            "unit": "\u00b0C", 
                            "settable_per_extruder": "False", 
                            "enabled": "=machine_heated_bed", 
                            "label": "Part Removal Temperature", 
                            "minimum_value": "=0", 
                            "type": "float", 
                            "children": {}, 
                            "description": "The ideal bed temperature to remove the model after printing.", 
                            "default_value": "50"
                        }, 
                        "material_keep_part_removal_temperature": {
                            "settable_per_mesh": "False", 
                            "type": "bool", 
                            "children": {}, 
                            "enabled": "=True", 
                            "label": "Keep Heating", 
                            "description": "Keep temperature after print on removal value", 
                            "settable_per_extruder": "False", 
                            "default_value": "True"
                        }, 
                        "material_keep_part_removal_temperature_t": {
                            "resolve": "=material_part_removal_temperature if material_keep_part_removal_temperature else 0", 
                            "settable_per_mesh": "False", 
                            "type": "float", 
                            "unit": "\u00b0C", 
                            "children": {}, 
                            "enabled": "=False", 
                            "label": "Temperature After Print", 
                            "description": "", 
                            "settable_per_extruder": "False", 
                            "default_value": "material_part_removal_temperature"
                        }
                    }, 
                    "description": "The temperature used for the heated build plate. If this is 0, the bed temperature will not be adjusted.", 
                    "settable_per_meshgroup": "False", 
                    "default_value": "60"
                }, 
                "material_diameter": {
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=3.5", 
                    "unit": "mm", 
                    "settable_per_extruder": "True", 
                    "enabled": "=machine_gcode_flavor != \"UltiGCode\"", 
                    "label": "Diameter", 
                    "minimum_value": "=0.0001", 
                    "minimum_value_warning": "=0.4", 
                    "type": "float", 
                    "children": {}, 
                    "description": "Adjusts the diameter of the filament used. Match this value with the diameter of the used filament.", 
                    "default_value": "2.85"
                }, 
                "default_material_print_temperature": {
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=285", 
                    "unit": "\u00b0C", 
                    "settable_per_extruder": "True", 
                    "enabled": "=machine_nozzle_temp_enabled", 
                    "label": "Default Printing Temperature", 
                    "minimum_value_warning": "=0", 
                    "minimum_value": "=-273.15", 
                    "type": "float", 
                    "children": {}, 
                    "description": "The default temperature used for printing. This should be the \"base\" temperature of a material. All other print temperatures should use offsets based on this value", 
                    "default_value": "210"
                }, 
                "retraction_enable": {
                    "settable_per_mesh": "False", 
                    "type": "bool", 
                    "children": {}, 
                    "description": "Retract the filament when the nozzle is moving over a non-printed area. ", 
                    "label": "Enable Retraction", 
                    "default_value": "True", 
                    "settable_per_extruder": "True"
                }, 
                "material_final_print_temperature": {
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=material_print_temperature", 
                    "unit": "\u00b0C", 
                    "settable_per_extruder": "True", 
                    "enabled": "=machine_nozzle_temp_enabled", 
                    "label": "Final Printing Temperature", 
                    "minimum_value": "=-273.15", 
                    "value": "=max(-273.15, material_print_temperature - 15)", 
                    "minimum_value_warning": "=material_standby_temperature", 
                    "type": "float", 
                    "children": {}, 
                    "description": "The temperature to which to already start cooling down just before the end of printing.", 
                    "default_value": "195"
                }, 
                "switch_extruder_retraction_amount": {
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=100", 
                    "unit": "mm", 
                    "settable_per_extruder": "True", 
                    "enabled": "=retraction_enable", 
                    "label": "Nozzle Switch Retraction Distance", 
                    "value": "=machine_heat_zone_length", 
                    "minimum_value_warning": "=0", 
                    "type": "float", 
                    "children": {}, 
                    "description": "The amount of retraction: Set at 0 for no retraction at all. This should generally be the same as the length of the heat zone.", 
                    "default_value": "20"
                }, 
                "retraction_count_max": {
                    "minimum_value": "=0", 
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=100", 
                    "type": "int", 
                    "children": {}, 
                    "enabled": "=retraction_enable", 
                    "label": "Maximum Retraction Count", 
                    "description": "This setting limits the number of retractions occurring within the minimum extrusion distance window. Further retractions within this window will be ignored. This avoids retracting repeatedly on the same piece of filament, as that can flatten the filament and cause grinding issues.", 
                    "settable_per_extruder": "True", 
                    "default_value": "90"
                }, 
                "material_flow": {
                    "minimum_value_warning": "=50", 
                    "minimum_value": "=5", 
                    "settable_per_mesh": "True", 
                    "maximum_value_warning": "=150", 
                    "type": "float", 
                    "unit": "%", 
                    "children": {
                        "material_flow_layer_0": {
                            "resolve": "=max(extruderValues('material_flow_layer_0'))", 
                            "settable_per_mesh": "False", 
                            "maximum_value_warning": "=150", 
                            "unit": "%", 
                            "settable_per_extruder": "False", 
                            "enabled": "=machine_gcode_flavor != \"UltiGCode\"", 
                            "label": "Initial Layer Flow Rate", 
                            "minimum_value": "=5", 
                            "value": "=resolveOrValue('material_flow')*0+100", 
                            "minimum_value_warning": "=50", 
                            "type": "float", 
                            "children": {}, 
                            "description": "Changes the flow rate for the first layer only. Used to compensate for filament die swell.", 
                            "settable_per_meshgroup": "False", 
                            "default_value": "100"
                        }
                    }, 
                    "description": "Flow compensation: the amount of material extruded is multiplied by this value.", 
                    "label": "Flow", 
                    "enabled": "=machine_gcode_flavor != \"UltiGCode\"", 
                    "default_value": "100"
                }, 
                "material_standby_temperature": {
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=260", 
                    "unit": "\u00b0C", 
                    "settable_per_extruder": "True", 
                    "enabled": "=machine_extruder_count > 1 and machine_nozzle_temp_enabled", 
                    "label": "Standby Temperature", 
                    "minimum_value": "=-273.15", 
                    "minimum_value_warning": "=0", 
                    "type": "float", 
                    "children": {}, 
                    "description": "The temperature of the nozzle when another nozzle is currently used for printing.", 
                    "default_value": "150"
                }
            }, 
            "description": "Material", 
            "label": "Material", 
            "type": "category"
        }, 
        "dual": {
            "icon": "category_dual", 
            "children": {
                "prime_tower_wipe_enabled": {
                    "settable_per_mesh": "False", 
                    "type": "bool", 
                    "children": {}, 
                    "enabled": "=resolveOrValue('prime_tower_enable')", 
                    "label": "Wipe Inactive Nozzle on Prime Tower", 
                    "description": "After printing the prime tower with one nozzle, wipe the oozed material from the other nozzle off on the prime tower.", 
                    "settable_per_extruder": "True", 
                    "default_value": "True"
                }, 
                "ooze_shield_angle": {
                    "resolve": "=min(extruderValues('ooze_shield_angle'))", 
                    "settable_per_mesh": "False", 
                    "maximum_value": "=90", 
                    "unit": "\u00b0", 
                    "settable_per_extruder": "False", 
                    "enabled": "=resolveOrValue('ooze_shield_enabled')", 
                    "label": "Ooze Shield Angle", 
                    "minimum_value": "=0", 
                    "type": "float", 
                    "children": {}, 
                    "description": "The maximum angle a part in the ooze shield will have. With 0 degrees being vertical, and 90 degrees being horizontal. A smaller angle leads to less failed ooze shields, but more material.", 
                    "default_value": "60"
                }, 
                "prime_tower_enable": {
                    "resolve": "=any(extruderValues('prime_tower_enable'))", 
                    "settable_per_mesh": "False", 
                    "type": "bool", 
                    "children": {}, 
                    "enabled": "=machine_extruder_count > 1", 
                    "label": "Enable Prime Tower", 
                    "description": "Print a tower next to the print which serves to prime the material after each nozzle switch.", 
                    "settable_per_extruder": "False", 
                    "default_value": "False"
                }, 
                "ooze_shield_dist": {
                    "resolve": "=max(extruderValues('ooze_shield_dist'))", 
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=20", 
                    "unit": "mm", 
                    "settable_per_extruder": "False", 
                    "enabled": "=resolveOrValue('ooze_shield_enabled')", 
                    "label": "Ooze Shield Distance", 
                    "minimum_value": "=0", 
                    "type": "float", 
                    "children": {}, 
                    "description": "Distance of the ooze shield from the print, in the X/Y directions.", 
                    "default_value": "2"
                }, 
                "prime_tower_position_y": {
                    "settable_per_mesh": "False", 
                    "maximum_value": "=machine_depth / 2 - resolveOrValue('prime_tower_size') if machine_center_is_zero else machine_depth - resolveOrValue('prime_tower_size')", 
                    "unit": "mm", 
                    "settable_per_extruder": "False", 
                    "enabled": "=resolveOrValue('prime_tower_enable')", 
                    "label": "Prime Tower Y Position", 
                    "value": "=machine_depth - prime_tower_size - max(extruderValue(adhesion_extruder_nr, 'brim_width') * extruderValue(adhesion_extruder_nr, 'initial_layer_line_width_factor') / 100 if adhesion_type == 'brim' else (extruderValue(adhesion_extruder_nr, 'raft_margin') if adhesion_type == 'raft' else (extruderValue(adhesion_extruder_nr, 'skirt_gap') if adhesion_type == 'skirt' else 0)), max(extruderValues('travel_avoid_distance'))) - max(extruderValues('support_offset')) - sum(extruderValues('skirt_brim_line_width')) * extruderValue(adhesion_extruder_nr, 'initial_layer_line_width_factor') / 100 - 1", 
                    "minimum_value": "=machine_depth / -2 if machine_center_is_zero else 0", 
                    "type": "float", 
                    "children": {}, 
                    "description": "The y coordinate of the position of the prime tower.", 
                    "default_value": "200"
                }, 
                "prime_tower_position_x": {
                    "settable_per_mesh": "False", 
                    "maximum_value": "=machine_width / 2 if machine_center_is_zero else machine_width", 
                    "unit": "mm", 
                    "settable_per_extruder": "False", 
                    "enabled": "=resolveOrValue('prime_tower_enable')", 
                    "label": "Prime Tower X Position", 
                    "value": "=machine_width - max(extruderValue(adhesion_extruder_nr, 'brim_width') * extruderValue(adhesion_extruder_nr, 'initial_layer_line_width_factor') / 100 if adhesion_type == 'brim' else (extruderValue(adhesion_extruder_nr, 'raft_margin') if adhesion_type == 'raft' else (extruderValue(adhesion_extruder_nr, 'skirt_gap') if adhesion_type == 'skirt' else 0)), max(extruderValues('travel_avoid_distance'))) - max(extruderValues('support_offset')) - sum(extruderValues('skirt_brim_line_width')) * extruderValue(adhesion_extruder_nr, 'initial_layer_line_width_factor') / 100 - 1", 
                    "minimum_value": "=resolveOrValue('prime_tower_size') - machine_width / 2 if machine_center_is_zero else resolveOrValue('prime_tower_size')", 
                    "type": "float", 
                    "children": {}, 
                    "description": "The x coordinate of the position of the prime tower.", 
                    "default_value": "200"
                }, 
                "prime_tower_flow": {
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=150", 
                    "unit": "%", 
                    "settable_per_extruder": "True", 
                    "enabled": "=resolveOrValue('prime_tower_enable')", 
                    "label": "Prime Tower Flow", 
                    "minimum_value": "=0.0001", 
                    "value": "=material_flow", 
                    "minimum_value_warning": "=50", 
                    "type": "float", 
                    "children": {}, 
                    "description": "Flow compensation: the amount of material extruded is multiplied by this value.", 
                    "default_value": "100"
                }, 
                "prime_tower_size": {
                    "resolve": "=max(extruderValues('prime_tower_size'))", 
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=20", 
                    "maximum_value": "=min(0.5 * machine_width, 0.5 * machine_depth)", 
                    "unit": "mm", 
                    "settable_per_extruder": "False", 
                    "enabled": "=resolveOrValue('prime_tower_enable')", 
                    "label": "Prime Tower Size", 
                    "minimum_value": "=0", 
                    "minimum_value_warning": "=max(extruderValues('prime_tower_line_width')) * 2", 
                    "type": "float", 
                    "children": {}, 
                    "description": "The width of the prime tower.", 
                    "default_value": "20"
                }, 
                "dual_pre_wipe": {
                    "settable_per_mesh": "False", 
                    "type": "bool", 
                    "children": {}, 
                    "enabled": "=resolveOrValue('prime_tower_enable')", 
                    "label": "Wipe Nozzle After Switch", 
                    "description": "After switching extruder, wipe the oozed material off of the nozzle on the first thing printed. This performs a safe slow wipe move at a place where the oozed material causes least harm to the surface quality of your print.", 
                    "settable_per_extruder": "True", 
                    "default_value": "True"
                }, 
                "ooze_shield_enabled": {
                    "resolve": "=any(extruderValues('ooze_shield_enabled'))", 
                    "settable_per_mesh": "False", 
                    "type": "bool", 
                    "children": {}, 
                    "enabled": "=machine_extruder_count > 1", 
                    "label": "Enable Ooze Shield", 
                    "description": "Enable exterior ooze shield. This will create a shell around the model which is likely to wipe a second nozzle if it's at the same height as the first nozzle.", 
                    "settable_per_extruder": "False", 
                    "default_value": "False"
                }, 
                "prime_tower_purge_volume": {
                    "minimum_value": "=0", 
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=1", 
                    "type": "float", 
                    "unit": "mm\u00b3", 
                    "children": {}, 
                    "enabled": "=resolveOrValue('prime_tower_enable') and dual_pre_wipe", 
                    "label": "Prime Tower Purge Volume", 
                    "description": "Amount of filament to be purged when wiping on the prime tower. Purging is useful for compensating the filament lost by oozing during inactivity of the nozzle.", 
                    "settable_per_extruder": "True", 
                    "default_value": "0"
                }, 
                "prime_tower_min_volume": {
                    "minimum_value": "=0", 
                    "settable_per_mesh": "False", 
                    "maximum_value_warning": "=resolveOrValue('prime_tower_size') ** 2 * resolveOrValue('layer_height')", 
                    "type": "float", 
                    "unit": "mm\u00b3", 
                    "children": {
                        "prime_tower_wall_thickness": {
                            "resolve": "=max(extruderValues('prime_tower_wall_thickness'))", 
                            "settable_per_mesh": "False", 
                            "maximum_value_warning": "=prime_tower_size / 2", 
                            "unit": "mm", 
                            "settable_per_extruder": "False", 
                            "enabled": "=prime_tower_enable", 
                            "label": "Prime Tower Thickness", 
                            "minimum_value": "=0.001", 
                            "value": "=round(max(2 * prime_tower_line_width, 0.5 * (prime_tower_size - math.sqrt(max(0, prime_tower_size ** 2 - prime_tower_min_volume / layer_height)))), 3)", 
                            "minimum_value_warning": "=2 * min(extruderValues('prime_tower_line_width')) - 0.0001", 
                            "type": "float", 
                            "children": {}, 
                            "description": "The thickness of the hollow prime tower. A thickness larger than half the Prime Tower Minimum Volume will result in a dense prime tower.", 
                            "default_value": "2"
                        }
                    }, 
                    "enabled": "=resolveOrValue('prime_tower_enable')", 
                    "label": "Prime Tower Minimum Volume", 
                    "description": "The minimum volume for each layer of the prime tower in order to purge enough material.", 
                    "settable_per_extruder": "True", 
                    "default_value": "10"
                }
            }, 
            "description": "Settings used for printing with multiple extruders.", 
            "label": "Dual Extrusion", 
            "type": "category"
        }
    }, 
    "version": 2, 
    "metadata": {
        "type": "machine", 
        "author": "Aleph Objects, Inc.", 
        "category": "LulzBot + Community Developed Add-Ons", 
        "manufacturer": "Aleph Objects, Inc.", 
        "setting_version": 1, 
        "file_formats": "text/x-gcode", 
        "visible": true, 
        "has_materials": true, 
        "preferred_material": "pla", 
        "preferred_quality": "normal", 
        "machine_extruder_trains": {
            "0": "lulzbot_taz6_extruder"
        }, 
        "supports_usb_connection": true, 
        "first_start_actions": [
            "MachineSettingsAction"
        ], 
        "has_machine_materials": true, 
        "has_machine_quality": true, 
        "required_actions": [
            "ChangeToolHead"
        ], 
        "firmware_last_version": "1.1.8.37", 
        "platform": "lulzbot_taz6.stl", 
        "platform_offset": [
            70, 
            0, 
            0
        ], 
        "printer_info_link": "https://www.lulzbot.com/store/printers/lulzbot-taz-6", 
        "toolhead_info_link": "https://www.lulzbot.com/store/tool-heads/lulzbot-taz-single-extruder-tool-head-v21", 
        "base_machine": "lulzbot_taz_6", 
        "firmware_toolhead_name": "SingleExtruder"
    }, 
    "name": "Twool Head TAZ 6"
}